Ich lade Daten in großen Mengen und kann alle Trigger-Änderungen im Nachhinein viel billiger als zeilenweise neu berechnen.
Wie kann ich alle Trigger in PostgreSQL vorübergehend deaktivieren?
postgresql
triggers
bulkinsert
David Schmitt
quelle
quelle
ENABLE REPLICA
oder festgelegt wurdenENABLE ALWAYS
.10.4
und es scheint diese obige Aussage zu ignorieren.PostgreSQL kennt den
ALTER TABLE tblname DISABLE TRIGGER USER
Befehl, der zu tun scheint, was ich brauche. Siehe ALTER TABLE .quelle
ALTER TABLE ... DISABLE TRIGGER USER
Erfordert eine exklusive Sperre für den Tisch.Zum Deaktivieren des Auslösers
Zum Aktivieren des Triggers
quelle
ALTER TABLE table_name DISABLE TRIGGER all
Es funktioniert nicht mit PostgreSQL 9.4 auf meinem Linux-Computer, wenn ich eine Tabelle über den Tabelleneditor in pgAdmin ändere, und funktioniert, wenn ich die Tabelle über eine normale Abfrage ändere. Manuelle Änderungen in der Tabelle pg_trigger funktionieren auch nicht ohne Neustart des Servers, aber dynamische Abfragen wie auf postgresql.nabble.com ENABLE / DISABLE ALL TRIGGERS IN DATABASE funktionieren. Dies kann nützlich sein, wenn Sie eine Abstimmung benötigen.
Wenn Sie beispielsweise Tabellen in einem bestimmten Namespace haben, kann dies sein:
Wenn Sie alle Trigger mit einer bestimmten Triggerfunktion deaktivieren möchten, kann dies sein:
PostgreSQL-Dokumentation für Systemkataloge
Es gibt weitere Steuerungsoptionen für den Trigger-Zündvorgang:
ALTER TABLE ... REPLICA TRIGGER AKTIVIEREN ... - Der Trigger wird nur im Replikationsmodus ausgelöst.
ALTER TABLE ... IMMER TRIGGER AKTIVIEREN ... - Trigger wird immer (offensichtlich) ausgelöst
quelle
Sie können Trigger auch in pgAdmin (III) deaktivieren:
quelle
auch dosent Arbeit für mich in Postgres 9.1. Ich benutze die beiden von Bartolo-Otrit beschriebenen Funktionen mit einigen Modifikationen. Ich habe die erste Funktion so geändert, dass sie für mich funktioniert, da der Namespace oder das Schema vorhanden sein müssen, um die Tabelle korrekt zu identifizieren. Der neue Code lautet:
dann mache ich einfach eine Auswahlabfrage für jedes Schema:
quelle