it-swarm.com.de

So erhalten Sie die Trigger, die einer Ansicht oder einer Tabelle in PostgreSQL zugeordnet sind

Ich muss eine Liste der Auslöser abrufen, die der angegebenen Tabelle/Sicht zugeordnet sind.
Kann mir jemand helfen, die Auslöser für eine Tabelle in PostgreSQL zu finden?

29
Saravanan

Dadurch werden alle Details zurückgegeben, die Sie wissen möchten

select * from information_schema.triggers

oder wenn Sie die Ergebnisse einer bestimmten Tabelle sortieren möchten, können Sie es versuchen

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

das Folgende gibt den Tabellennamen zurück, der den Auslöser hat

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

Das Problem mit der Ansicht information_schema.triggers (abgesehen davon, dass sie langsam ist), ist per Dokumentation :

Die View-Trigger enthalten alle im aktuellen .__ definierten Trigger. Datenbank für Tabellen und Ansichten, die der aktuelle Benutzer besitzt oder über einige .__ verfügt. Privileg anders als SELECT an.

Das heißt, Sie sehen nur Auslöser, für die Sie die entsprechenden Berechtigungen haben.

Um all -Trigger für eine Tabelle anzuzeigen, schauen Sie in den Systemkatalog pg_trigger

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

Funktioniert für die Tabellen und.
Sie können auch eine GUI wie pgAdmin verwenden, die die Liste unter dem Tabellenknoten im Objektbrowser anzeigt.

28

Im psql-Befehlszeilenprogramm können Sie auch \dS <table_name> verwenden (von https://serverfault.com/questions/331024/how-can-i-show-the-content-of-a-trigger-with-psql )

5
Touko

Mir ist aufgefallen, dass Infoschema KEINE Schlüsselrelationstabelleninformationen zu Triggern enthält (zumindest in Postgres 10). pg_triggers enthält diese Information. Außerdem wurde bemerkt, dass datagrip keine Relationstabellen skriptet, wenn Sie die Trigger skripten. Daher gehe ich davon aus, dass es ein Infoschema verwendet, um sie zu skripten. Die PG-Dokumentation besagt, dass die Spalten in infoschema für action_reference_old_table für eine Funktion gelten, die in postgres (10) nicht verfügbar ist, aber ich verwende sie definitiv, und sie werden definitiv in pg_triggers angezeigt. Zu Ihrer Information.

0
jeremyg
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