Postgres - 触发后删除记录

Postgres - delete record after trigger

我有一个带有一些触发器的 postgres table,如果记录被更新或删除,这些触发器就会触发。他们基本上将记录存档,因此它们不会被真正删除——他们只是更改某些属性,因此记录不会显示在相应的视图中。

有时我想手动永久删除一条记录,但我做不到,因为触发器会触发,如果我执行 DELETE 查询,它就会执行。

示例: DELETE FROM records WHERE operator = 20

有没有办法 运行 DELETE 查询并绕过在 DELETE 时触发的触发器?

对于这样的设置,我认为典型的方法是避免授予对底层 table 的任何直接特权,并将您的 INSERT / UPDATE / DELETE 在视图上触发(允许 table 所有者根据需要更改它)。

如果您是table所有者,您可以使用ALTER TABLE暂时DISABLE并重新ENABLE触发。只要您在一个事务中执行所有这些操作,您就可以安全地防止并发 DELETEs,尽管它们会阻塞直到您的事务提交。

如果您拥有超级用户权限,您还可以通过将 session_replication_role 设置为 replica 来防止触发器触发,前提是相关触发器尚未配置为在复制数据库上触发。