web-dev-qa-db-fra.com

Comment obtenir le ou les déclencheurs associés à une vue ou à une table dans PostgreSQL

J'ai une exigence pour obtenir la liste des déclencheurs associés à la table/vue donnée.
Quelqu'un peut-il m'aider à trouver les déclencheurs d'une table dans PostgreSQL?

29
Saravanan

Cela retournera tous les détails que vous voulez savoir

select * from information_schema.triggers

ou si vous voulez trier les résultats d'une table spécifique, alors vous pouvez essayer

SELECT event_object_table
      ,trigger_name
      ,event_manipulation
      ,action_statement
      ,action_timing
FROM  information_schema.triggers
WHERE event_object_table = 'tableName' -- Your table name comes here
ORDER BY event_object_table
     ,event_manipulation

ce qui suit retournera le nom de la table qui a un déclencheur

select relname as table_with_trigger
from pg_class
where pg_class.oid in (
        select tgrelid
        from pg_trigger
        )
34
Vivek S.

Le problème avec la vue information_schema.triggers (en plus d’être lent) est, par documentation :

Les déclencheurs de vue contiennent tous les déclencheurs définis dans le fichier .__ en cours. base de données sur les tables et les vues que l’utilisateur actuel possède ou a.. privilège autre que SELECT sur.

Cela signifie que vous ne voyez que les déclencheurs pour lesquels vous disposez des privilèges appropriés.

Pour voir les déclencheurs all d'une table, consultez le catalogue système pg_trigger

SELECT tgname
FROM   pg_trigger
WHERE  tgrelid = 'myschema.mytbl'::regclass; -- optionally schema-qualified

Fonctionne pour les vues de tables et.
Vous pouvez également utiliser une interface graphique telle que pgAdmin qui affiche la liste sous le nœud de la table dans le navigateur d’objets.

28
Erwin Brandstetter

Sur l'outil de ligne de commande psql, vous pouvez également utiliser \dS <table_name> (from https://serverfault.com/questions/331024/how-can-i-show-the-content-of-a-trigger-with-psql )

5
Touko
select    tgname
    ,relname
    ,tgenabled
    ,nspname    from    pg_trigger 
    join    pg_class    on    (pg_class.oid=pg_trigger.tgrelid) 
    join    pg_namespace    on    (nspowner=relowner);


tgenabled (To check if its disabled)

O = trigger fires in "Origin" and "local" modes, 
D = trigger is disabled, 
R = trigger fires in "replica" mode,
A = trigger fires always.
0
Chanakya