【问题标题】:More efficient delete triggers in PostgreSQLPostgreSQL 中更高效的删除触发器
【发布时间】:2013-08-16 13:07:40
【问题描述】:

我的 PostgreSQL 9.2 数据库定义了许多 AFTER DELETE 行级触发器,用于在删除父行时删除子行。 (在子行引用父行的情况下,也有许多带有 ON DELETE CASCADE 的 FK。)这很有效,但是当需要删除许多行时它会很慢。有没有办法为此或其他方式使用语句级触发器来提高删除效率?我无法弄清楚如何在语句级触发器函数中获取已删除的行 - 或者关于刚刚发生的事情的任何有用信息,真的。

【问题讨论】:

  • 为什么不使用级联删除?
  • @Elias 它不会有任何好处,因为它们现在实际上只是引擎盖下的行级触发器......

标签: sql performance postgresql triggers


【解决方案1】:

目前没有太多。

您可以通过将要删除的行插入到BEFORE ... FOR EACH ROW 触发器中的边表中来积累有关要删除的行的信息,然后让AFTER 语句级触发器从子表中删除,但这不会起作用内置外键强制执行。

关于为语句级触发器累积“更改关系”的定期讨论。这就是你想要的,但还没有人想出一个可行的补丁来实现它。

【讨论】:

  • 这听起来很有可能。为什么你说它不适用于 FK 执法?我看不出会是什么问题。
  • @EM FK 约束本身作为触发器实现;无论您是否已删除行,它们都会触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多