Postgres-触发后删除记录

时间:2019-02-21 09:39:26

标签: postgresql database-trigger

我有一个postgres表,其中包含一些触发器,如果​​记录被覆盖或删除,这些触发器将触发。它们基本上是归档记录,因此不会被删除-它们只是更改某些属性,因此记录不会显示在相应的视图中。

有时我想永久删除一条记录,但是我不能这样做,因为触发器会触发并且执行我的DELETE查询就可以了。

示例: DELETE FROM records WHERE operator = 20

是否可以运行DELETE查询并绕过在DELETE上触发的触发器?

1 个答案:

答案 0 :(得分:1)

使用这样的设置,我认为典型的方法是避免在基础表上授予任何直接特权,并将INSERT / UPDATE / DELETE触发器放在视图上(允许表所有者根据需要进行更改)。

如果您是表所有者,则可以使用ALTER TABLE临时DISABLE并重新ENABLE触发器。只要您在事务中完成所有这些操作,就可以安全地防止并发DELETE并发,尽管它们会阻塞直到您的事务提交。

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