2016-06-09 12 views
2

Ich muss vorübergehend deaktivieren ein postgreSQL Trigger in einer Transaktion, aber ohne Tisch hardlocking Sie jemand wissen, ob es möglich ist,Wie können PostgreSQL-Trigger nur in einer Transaktion deaktiviert werden?

so etwas wie dies, aber ohne Tabellensperren und Trigger zu deaktivieren außerhalb dieser Transaktion

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; 

Antwort

2

vorübergehend alle Trigger in einer PostgreSQL-Sitzung zu deaktivieren, verwenden diese:

SET session_replication_role = replica; 

, die nur alle Trigger für die aktuelle Datenbanksitzung deaktiviert. Nützlich für Massenoperationen, aber denken Sie daran, die Datenbank konsistent zu halten.

wieder aktivieren:

SET session_replication_role = DEFAULT; 

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

0

Sie kann alle Trigger in dieser Tabelle deaktivieren. Es sollte wie folgt aussehen:

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

für eine Einabzug Verwendung dieses zu deaktivieren:

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

Sie können mehr über ALTER TABLE in der Dokumentation lesen.

+1

Ja, aber ich will es nur in einer SQL-Transaktion deaktiviert sein und will nicht Tabelle zu blockieren, während Auslöser deaktiviert ist. DISABLE TRIGGER: Hardlock-Tabelle, wenn in der Transaktion – gori

Verwandte Themen