PostgreSQL中更有效的删除触发器

时间:2013-08-16 13:07:41

标签: sql performance postgresql triggers

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

1 个答案:

答案 0 :(得分:2)

目前没有多少。

您可以通过将行插入BEFORE ... FOR EACH ROW触发器的侧表来累积有关要删除的行的信息,然后使用AFTER语句级触发器执行子表中的删除操作,但是内置的外键执行不会很好。

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