Come si può sapere se un trigger è attivato in PostgreSQL?
-
22-08-2019 - |
Domanda
Il mio googling-fu mi sta venendo a mancare. Come sapere se un trigger PostgreSQL è disattivato o non?
Soluzione
E 'il mio primo giorno con PostreSQL, ma penso che si può controllare lo stato di attivazione tramite tabella di sistema pg_trigger: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html
Le colonne si ha bisogno sono tgrelid
e tgenabled
.
Altri suggerimenti
L'SQL di seguito farà il lavoro. Esso mostra tutti i trigger nel database corrente.
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
Se tgenabled è 'D', il trigger viene disattivato. Tutti gli altri valori (documentati href="https://www.postgresql.org/docs/current/static/catalog-pg-trigger.html" qui ) indicano, che è attivata in qualche modo.
A proposito. Se si desidera controllare i trigger per una tabella specifica, la query è un po 'più corta:
SELECT * FROM pg_trigger
WHERE tgrelid = 'your_schema.your_table'::regclass
Cast per la regclass tipo che si ottiene da qualificato nome della tabella per OID (ID oggetto) in modo semplice.
SELECT EXISTS (
SELECT tgenabled
FROM pg_trigger
WHERE tgname='your_unique_trigger_name' AND
tgenabled != 'D'
);
Se si conosce il nome del trigger è unica quanto sopra restituirà true (t) se il your_unique_trigger_name di trigger è attivata:
exists
--------
t
(1 row)
Se disabilitata sarebbe restituire false (F).