如何仅在一个事务中禁用PostgreSQL触发器?

问题描述 投票:5回答:2

我需要临时禁用事务中的一个PostgreSQL触发器,但没有硬件锁定表。有人知道是否有可能吗?

这样的事情没有锁定表和在此事务之外禁用触发器。

BEGIN TRANSACTION;

  ALTER TABLE foo DISABLE TRIGGER bar;

  -- DO SOME UPDATES ON foo
  UPDATE foo set field = 'value' where field = 'test';

  ALTER TABLE foo ENABLE TRIGGER bar;

COMMIT;
database postgresql triggers postgresql-9.5
2个回答
8
投票

要临时禁用PostgreSQL会话中的所有触发器,请使用以下命令:

SET session_replication_role = replica;

这将仅禁用当前数据库会话的所有触发器。对于批量操作很有用,但请记住要小心保持数据库的一致性。

要重新启用:

SET session_replication_role = DEFAULT;

资料来源:http://koo.fi/blog/2013/01/08/disable-postgresql-triggers-temporarily/


2
投票

您可以禁用此表中的所有触发器。它应该如下所示:

ALTER TABLE tblname DISABLE TRIGGER USER;
Your SQL;
ALTER TABLE tblname ENABLE TRIGGER USER;

要禁用单个触发器,请使用以下命令:

ALTER TABLE tblname DISABLE TRIGGER trigger_name;
Your SQL;
ALTER TABLE tblname ENABLE TRIGGER trigger_name;

您可以在文档中阅读有关ALTER TABLE的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.