为什么Postgresql上的SET CONSTRAINTS ALL DEFERRED需要很长时间?

Dav*_*ker 5 postgresql

我们的Postgres 9.2.4服务器平均需要0.69秒(15000条语句)才能执行

SET CONSTRAINTS ALL DEFERRED 
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

INITIALLY DEFERRED在表定义中使用而不是使用SET CONSTRAINTS ..消除此时间或仅将其隐藏在其他地方吗?

Den*_*rdy 2

恕我直言,这可能是因为每次运行此语句时,后台发生的是对位于 pg_catalog 中的表定义的大更新语句。换句话说,您将死行添加到 pg_catalog,这会导致在适当的 seq 扫描期间访问越来越多的磁盘空间。

如果您确实每天运行该语句 15k 次,也许您需要仔细审视一下您的架构或工作流程?

  • 这是不正确的。SET CONSTRAINTS 不会触及系统目录。 (3认同)