Domanda

Il mio googling-fu mi sta venendo a mancare. Come sapere se un trigger PostgreSQL è disattivato o non?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top