2016-06-09 60 views
2

我需要臨時禁用一個PostgreSQL觸發的交易,但沒有hardlocking表也有人知道是否有可能如何在一個事務中禁用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; 

回答

2

要暫時禁用一個PostgreSQL會話的所有觸發器,使用:

SET session_replication_role = replica; 

禁用僅當前數據庫會話的所有觸發器。對批量操作很有用,但請記住保持數據庫的一致性。

要重新啓用:

SET session_replication_role = DEFAULT; 

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

0

你可以在此表中禁用所有觸發器。它應該是這樣的:

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

+1

是的,但我希望它只是在一個SQL事務被禁用,不想塊表,而觸發器被禁用。 DISABLE TRIGGER:處於事務中的hardlocks表 – gori