PostgreSQL中删除触发器的正确方法

PostgreSQL中删除触发器的正确方法,postgresql,triggers,Postgresql,Triggers,简短的问题 必须使用下拉触发器操作: 或者仅仅从pg_触发器表中删除条目就足够了吗?您肯定应该使用DROP trigger语句来实现这一点。 这是标准的和便携式的。不要从pg_触发器中删除。此外,在删除触发器之前,必须明确删除触发器所基于的函数。正确的方法是唯一的方法。使用drop trigger,即使从pg_trigger中删除似乎工作正常。事实上并非如此。从pg_trigger手动删除条目后,您可以得到如下错误(不是立即,而是在您最不希望的时候): 错误:找不到触发器123456的元组 这

简短的问题

必须使用下拉触发器操作:


或者仅仅从pg_触发器表中删除条目就足够了吗?

您肯定应该使用
DROP trigger
语句来实现这一点。
这是标准的和便携式的。

不要从pg_触发器中删除。此外,在删除触发器之前,必须明确删除触发器所基于的函数。

正确的方法是唯一的方法。使用
drop trigger
,即使从
pg_trigger
中删除似乎工作正常。事实上并非如此。从
pg_trigger
手动删除条目后,您可以得到如下错误(不是立即,而是在您最不希望的时候):

错误:找不到触发器123456的元组

这是因为Postgres也在
pg\u depend
中的表中存储有关触发器的信息。作为示例,您将无法放下该表

更新。关于触发器及其相关函数之间依赖关系的一些解释

触发器不是依赖于触发器的触发器函数,相反,触发器依赖于函数。因此,如果要同时删除触发器和触发器函数,应使用选项
cascade
删除该函数,例如:

drop function a_trigger_function() cascade;
如果没有该选项,则无法在触发器存在时(在删除触发器之前)删除触发器函数。因此,问题的另一个答案中的陈述是误导性的


还要注意,在某些情况下,与触发器同时删除函数是不合适的,因为一个函数可能在许多触发器中使用。

当您可以使用标准SQL时,请使用它。也许明天你会和其他RDBMS一起工作。永远不要乱动系统表。所以,不:不要从
pgu触发器中删除
no,没有这样的强制。当然,如果不使用触发器函数,您应该删除它。@klin有办法同时删除触发器函数吗?像
drop trigger xxx cascade
?谢谢@klin,我希望我能再次投票:)