Her er tre muligheder for at liste udløsere for en given tabel i PostgreSQL.
information_schema.triggers Vis
Denne visning indeholder alle funktioner og procedurer i den aktuelle database, som den aktuelle bruger ejer eller har andre rettigheder end SELECT på.
En af kolonnerne i denne visning er event_object_table , som indeholder navnet på den tabel, som udløseren er defineret på.
Vi kan derfor bruge denne visning til at få udløsere for en specifik tabel som denne:
SELECT
trigger_schema,
trigger_name,
event_manipulation,
action_statement
FROM information_schema.triggers
WHERE event_object_table = 'film'; Eksempelresultat:
+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
| trigger_schema | trigger_name | event_manipulation | action_statement |
+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
| public | film_fulltext_trigger | INSERT | EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description') |
| public | film_fulltext_trigger | UPDATE | EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description') |
| public | last_updated | UPDATE | EXECUTE FUNCTION last_updated() |
+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
Da visningen kun returnerer de triggere som den aktuelle bruger ejer eller har et andet privilegium end SELECT på, kunne den resulterende liste kun repræsentere en delmængde af de faktiske udløsere, der er defineret i tabellen.
pg_trigger Katalog
pg_catalog.pg_trigger kataloget gemmer triggers på tabeller og visninger, og det er ikke begrænset til kun de triggere som den aktuelle bruger ejer eller har andre privilegier end SELECT på:
SELECT
tgname AS trigger_name
FROM
pg_trigger
WHERE
tgrelid = 'public.film'::regclass
ORDER BY
trigger_name; Eksempelresultat:
+------------------------------+ | 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 | +------------------------------+
For at få kilden kan vi inkludere pg_proc se i vores forespørgsel:
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; Eksempelresultat:
+------------------------------+------------------------------------------+ | 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_fulltext_trigger | tsvector_update_trigger_byid | | last_updated | +| | | BEGIN +| | | NEW.last_update = CURRENT_TIMESTAMP;+| | | RETURN NEW; +| | | END | +------------------------------+------------------------------------------+
Husk, at indholdet af pg_proc.prosrc kolonne afhænger af implementeringssproget/opkaldskonventionen. Det kunne indeholde den faktiske kildekode til funktionen for fortolkede sprog, et linksymbol, et filnavn eller næsten alt andet.
\dS Kommando
Når du bruger psql, er \dS kommandoen er en hurtig måde at få information om tabeller, visninger osv., inklusive eventuelle udløsere, der er defineret mod dem.
Vi kan tilføje tabelnavnet til denne kommando for at returnere information om netop den tabel:
\dS film Eksempelresultat:
+----------------------+-----------------------------+-----------+----------+---------------------------------------+
| Column | Type | Collation | Nullable | Default |
+----------------------+-----------------------------+-----------+----------+---------------------------------------+
| film_id | integer | | not null | nextval('film_film_id_seq'::regclass) |
| title | character varying(255) | | not null | |
| description | text | | | |
| release_year | year | | | |
| language_id | smallint | | not null | |
| original_language_id | smallint | | | |
| rental_duration | smallint | | not null | 3 |
| rental_rate | numeric(4,2) | | not null | 4.99 |
| length | smallint | | | |
| replacement_cost | numeric(5,2) | | not null | 19.99 |
| rating | mpaa_rating | | | 'G'::mpaa_rating |
| last_update | timestamp without time zone | | not null | now() |
| special_features | text[] | | | |
| fulltext | tsvector | | not null | |
+----------------------+-----------------------------+-----------+----------+---------------------------------------+
Indexes:
"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 RESTRICT
Referenced by:
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 RESTRICT
TABLE "inventory" CONSTRAINT "inventory_film_id_fkey" FOREIGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT
Triggers:
film_fulltext_trigger BEFORE INSERT OR UPDATE ON film FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description')
last_updated BEFORE UPDATE ON film FOR EACH ROW EXECUTE FUNCTION last_updated()