Oto trzy opcje wypisania wyzwalaczy dla danej tabeli w PostgreSQL.
information_schema.triggers
Zobacz
Ten widok zawiera wszystkie funkcje i procedury w bieżącej bazie danych, które aktualny użytkownik posiada lub ma uprawnienia inne niż SELECT
na.
Jedna z kolumn w tym widoku to event_object_table
, który zawiera nazwę tabeli, w której zdefiniowano wyzwalacz.
Dlatego możemy użyć tego widoku, aby uzyskać wyzwalacze dla określonej tabeli w następujący sposób:
SELECT
trigger_schema,
trigger_name,
event_manipulation,
action_statement
FROM information_schema.triggers
WHERE event_object_table = 'film';
Przykładowy wynik:
+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+ | 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() | +----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
Widząc, że widok zwraca tylko te wyzwalacze które aktualny użytkownik posiada lub ma uprawnienia inne niż SELECT
włączona, wynikowa lista może reprezentować tylko podzbiór rzeczywistych wyzwalaczy, które są zdefiniowane w tabeli.
pg_trigger
Katalog
pg_catalog.pg_trigger
katalog przechowuje wyzwalacze w tabelach i widokach i nie ogranicza się tylko do wyzwalaczy które aktualny użytkownik posiada lub ma uprawnienia inne niż SELECT
w dniu:
SELECT
tgname AS trigger_name
FROM
pg_trigger
WHERE
tgrelid = 'public.film'::regclass
ORDER BY
trigger_name;
Przykładowy wynik:
+------------------------------+ | 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 | +------------------------------+
Aby uzyskać źródło, możemy dołączyć pg_proc
zobacz w naszym zapytaniu:
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;
Przykładowy wynik:
+------------------------------+------------------------------------------+ | 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 | +------------------------------+------------------------------------------+
Pamiętaj, że zawartość pg_proc.prosrc
kolumna zależy od języka implementacji/konwencji wywołań. Może zawierać rzeczywisty kod źródłowy funkcji dla języków interpretowanych, symbol łącza, nazwę pliku lub cokolwiek innego.
\dS
Polecenie
Podczas korzystania z psql, \dS
polecenie to szybki sposób na uzyskanie informacji o tabelach, widokach itp., w tym o wszelkich zdefiniowanych dla nich wyzwalaczach.
Możemy dodać nazwę tabeli do tego polecenia, aby zwrócić informacje tylko o tej tabeli:
\dS film
Przykładowy wynik:
+----------------------+-----------------------------+-----------+----------+---------------------------------------+ | 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()