PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

3 Möglichkeiten, alle Trigger für eine bestimmte Tabelle in PostgreSQL aufzulisten

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:

+---------------------+------------------------------- ------+-----------+----------+-------------------- -------------------+| Spalte | Geben Sie | ein Sortierung | Nullable | Standard |+----------------------+------------------------ -----+-----------+----------+--------------------- ------------------+| film_id | Ganzzahl | | nicht null | nextval('film_film_id_seq'::regclass) || Titel | Zeichen variieren (255) | | nicht null | || Beschreibung | Text | | | || Erscheinungsjahr | Jahr | | | || language_id | smallint | | nicht null | || ursprüngliche_Sprache_ID | smallint | | | || Mietdauer | smallint | | nicht null | 3 || Mietpreis | numerisch(4,2) | | nicht null | 4,99 || Länge | smallint | | | || Ersatzkosten | numerisch(5,2) | | nicht null | 19,99 || Bewertung | mpaa_rating | | | 'G'::mpaa_rating || letzte_aktualisierung | Zeitstempel ohne Zeitzone | | nicht null | jetzt() || besondere_funktionen | text[] | | | || Volltext | tsvektor | | nicht null | |+----------------------+-------------------- ----+-----------+----------+--------------------- -----------------+Indizes:"film_pkey" PRIMARY KEY, btree (film_id) "film_fulltext_idx" gist (fulltext) "idx_fk_language_id" btree (language_id) "idx_fk_original_language_id" btree (original_language_id ) "idx_title" btree (title) Foreign-Key Constraints:"film_language_id_fkey" FOREIGN KEY (language_id) REFERENCES language(language_id) ON UPDATE CASCADE ON DELETE RESTRICT "film_original_language_id_fkey" FOREIGN KEY (original_language_id) REFERENCES language(language_id) ON UPDATE CASCADE ON DELETE RESTRICTRreferenziert durch:TABLE "film_actor" CONSTRAINT "film_actor_film_id_fkey" FOREIGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT TABLE "film_category" CONSTRAINT "film_category_film_id_fkey" FOREIGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE BESCHRÄNKUNGSTABELLE "inventory" CONSTRAINT "inventory_film_id_fkey" FORE IGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICTTriggers:film_fulltext_trigger BEVOR INSERT ODER UPDATE ON film FÜR JEDE REIHE FUNKTION AUSFÜHREN tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description') last_updated VOR AKTUALISIERUNG AUF FILM FÜR JEDE REIHE FUNKTION AUSFÜHREN last_updated()