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

slu*_*pet 4 postgresql triggers

简短的问题...

必须使用 DROP TRIGGER 操作:https : //www.postgresql.org/docs/9.1/static/sql-droptrigger.html

或者只是从 pg_trigger 表中删除条目就足够了?

kli*_*lin 5

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

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

这是因为 Postgres 也将有关表上触发器的信息存储在pg_depend. 作为示范结果,您将无法删除表。

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

不是触发器函数依赖于触发器,反之亦然,触发器依赖于函数。因此,如果您想同时删除触发器和触发器函数,您应该使用 option 删除函数cascade,例如:

drop function a_trigger_function() cascade;
Run Code Online (Sandbox Code Playgroud)

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

另请注意,在某些情况下,不适合与触发器同时删除函数,因为函数可能会在许多触发器中使用。