Mein googling-fu versagt mich. Wie kann ich feststellen, ob ein PostgreSQL-Trigger deaktiviert ist oder nicht?Wie können Sie feststellen, ob ein Trigger in PostgreSQL aktiviert ist?
Antwort
Es ist mein erster Tag mit PostreSQL, aber ich denke, man kann den Triggerzustand über pg_trigger Systemtabelle überprüfen: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html
Die Spalten, die Sie benötigen sind tgrelid
und tgenabled
.
Aktueller Link: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html –
Die folgende SQL wird die Arbeit tun. Es zeigt alle Trigger in Ihrer aktuellen Datenbank an.
SELECT pg_namespace.nspname, pg_class.relname, pg_trigger.*
FROM pg_trigger
JOIN pg_class ON pg_trigger.tgrelid = pg_class.oid
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
Wenn tgenabled ist 'D', der Trigger deaktiviert ist. Alle anderen Werte (dokumentiert here) zeigen an, dass es in irgendeiner Weise aktiviert ist.
BTW. Wenn Sie die Auslöser für eine bestimmte Tabelle überprüfen möchten, ist die Abfrage etwas kürzer:
SELECT * FROM pg_trigger
WHERE tgrelid = 'your_schema.your_table'::regclass
Die werfen zum regclass Typ bekommt man von qualifizierten Tabellennamen OID (Objekt-ID), die leicht Weg.
SELECT EXISTS (
SELECT tgenabled
FROM pg_trigger
WHERE tgname='your_unique_trigger_name' AND
tgenabled != 'D'
);
Wenn Sie wissen, dass die Triggernamen des oben wird return true (t) eindeutig sind, wenn die your_unique_trigger_name Trigger aktiviert ist:
exists
--------
t
(1 row)
Wenn es würde return false deaktiviert (f).
sind die Trigger beim Erstellen von em standardmäßig aktiviert? Ist explizit ALTER TABLE ENABLE TRIGGER notwendig? – user4658312