Hier sind drei Optionen zum Auflisten der Trigger für eine bestimmte Tabelle in PostgreSQL.
Die information_schema.triggers
Anzeigen
Diese Ansicht enthält alle Funktionen und Prozeduren in der aktuellen Datenbank, die der aktuelle Benutzer besitzt oder über eine andere Berechtigung als SELECT
verfügt An.
Eine der Spalten in dieser Ansicht ist event_object_table
, die den Namen der Tabelle enthält, für die der Trigger definiert ist.
Wir können daher diese Ansicht verwenden, um die Trigger für eine bestimmte Tabelle wie folgt zu erhalten:
SELECT
trigger_schema,
trigger_name,
event_manipulation,
action_statement
FROM information_schema.triggers
WHERE event_object_table = 'film';
Beispielergebnis:
+----+-------+----- -------------------------------------------------- -------------------------------------------------- ----------------+| trigger_schema | trigger_name | event_manipulation | action_statement |+-----------+-------------------------------+------ --------------+----------------------------------- -------------------------------------------------- ---------------+| öffentlich | film_volltext_auslöser | EINFÜGEN | FUNKTION AUSFÜHREN tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description') || öffentlich | film_volltext_auslöser | AKTUALISIEREN | FUNKTION AUSFÜHREN tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description') || öffentlich | last_updated | AKTUALISIEREN | FUNKTION AUSFÜHREN last_updated() |+-----------+-----------------------+-- ------------------+------------------------------- -------------------------------------------------- -------------------+
Da die Ansicht nur die Trigger zurückgibt die der aktuelle Benutzer besitzt oder andere Rechte als SELECT
hat on, könnte die resultierende Liste nur eine Teilmenge der tatsächlichen Trigger darstellen, die in der Tabelle definiert sind.
Der pg_trigger
Katalog
Der pg_catalog.pg_trigger
Katalog speichert Trigger auf Tabellen und Ansichten, und es ist nicht nur auf diese Trigger beschränkt die der aktuelle Benutzer besitzt oder andere Privilegien als SELECT
auf:
SELECT
tgname AS trigger_name
FROM
pg_trigger
WHERE
tgrelid = 'public.film'::regclass
ORDER BY
trigger_name;
Beispielergebnis:
+------------------------------+| trigger_name |+------------------------------+| RI_ConstraintTrigger_a_24890 || RI_ConstraintTrigger_a_24891 || RI_ConstraintTrigger_a_24900 || RI_ConstraintTrigger_a_24901 || RI_ConstraintTrigger_a_24915 || RI_ConstraintTrigger_a_24916 || RI_ConstraintTrigger_c_24907 || RI_ConstraintTrigger_c_24908 || RI_ConstraintTrigger_c_24912 || RI_ConstraintTrigger_c_24913 || film_fulltext_trigger || last_updated |+------------------------------+
Um die Quelle zu erhalten, können wir den pg_proc
einfügen Ansicht in unserer Abfrage:
SELECT
t.tgname,
p.prosrc
FROM
pg_trigger t JOIN pg_proc p ON p.oid = t.tgfoid
WHERE
t.tgrelid = 'public.film'::regclass
ORDER BY
t.tgname;
Beispielergebnis:
+------------------------------+--------------- ----------------------------+| tgname | prosrc |+------------------------------+---------------- --------------------------+| RI_ConstraintTrigger_a_24890 | RI_FKey_restrict_del || RI_ConstraintTrigger_a_24891 | RI_FKey_cascade_upd || RI_ConstraintTrigger_a_24900 | RI_FKey_restrict_del || RI_ConstraintTrigger_a_24901 | RI_FKey_cascade_upd || RI_ConstraintTrigger_a_24915 | RI_FKey_restrict_del || RI_ConstraintTrigger_a_24916 | RI_FKey_cascade_upd || RI_ConstraintTrigger_c_24907 | RI_FKey_check_ins || RI_ConstraintTrigger_c_24908 | RI_FKey_check_upd || RI_ConstraintTrigger_c_24912 | RI_FKey_check_ins || RI_ConstraintTrigger_c_24913 | RI_FKey_check_upd || film_volltext_auslöser | tsvector_update_trigger_byid || last_updated | +|| | BEGINNEN +|| | NEW.last_update =CURRENT_TIMESTAMP;+|| | RÜCKGABE NEU; +|| | ENDE |+------------------------------+---------------- --------------------------+
Beachten Sie, dass der Inhalt der Datei pg_proc.prosrc
Spalte hängt von der Implementierungssprache/Aufrufkonvention ab. Es könnte den eigentlichen Quellcode der Funktion für interpretierte Sprachen, ein Linksymbol, einen Dateinamen oder so ziemlich alles andere enthalten.
Der \dS
Befehl
Bei Verwendung von psql ist der \dS
Befehl ist eine schnelle Möglichkeit, Informationen über Tabellen, Ansichten usw. zu erhalten, einschließlich aller Trigger, die für sie definiert sind.
Wir können den Tabellennamen an diesen Befehl anhängen, um Informationen über genau diese Tabelle zurückzugeben:
\dS film
Beispielergebnis: