¿Cómo verificar si existe un disparador en PostgreSQL?

Quiero verificar la corrección de las migraciones de bases de datos que agregan desencadenantes a algunas tablas. Estoy usando sqitch , así que me gustaría encontrar una forma de verificarlo con consultas SQL. Creo que debería ser posible con las tablas del sistema postgres, pero actualmente no puedo encontrar la manera de hacerlo.

Utilice el catálogo pg_trigger .

Una búsqueda simple para un books table:

 select tgname from pg_trigger where not tgisinternal and tgrelid = 'books'::regclass; tgname --------------- books_trigger (1 row) 

Usando pg_proc para get la fuente de la function de disparo:

 select tgname, proname, prosrc from pg_trigger join pg_proc p on p.oid = tgfoid where not tgisinternal and tgrelid = 'books'::regclass; tgname | proname | prosrc ---------------+---------------+------------------------------------------------ books_trigger | books_trigger | + | | begin + | | if tg_op = 'UPDATE' then + | | if new.listorder > old.listorder then + | | update books + | | set listorder = listorder- 1 + | | where listorder <= new.listorder + | | and listorder > old.listorder + | | and id <> new.id; + | | else + | | update books + | | set listorder = listorder+ 1 + | | where listorder >= new.listorder + | | and listorder < old.listorder + | | and id <> new.id; + | | end if; + | | else + | | update books + | | set listorder = listorder+ 1 + | | where listorder >= new.listorder + | | and id <> new.id; + | | end if; + | | return new; + | | end (1 row) 

Ejemplo del uso de la function pg_get_triggerdef() :

 select pg_get_triggerdef(t.oid) as "trigger declaration" from pg_trigger t where not tgisinternal and tgrelid = 'books'::regclass; trigger declaration -------------------------------------------------------------------------------------------------------------- CREATE TRIGGER books_trigger BEFORE INSERT OR UPDATE ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger() (1 row)