Zde jsou tři možnosti, jak vypsat spouštěče pro danou tabulku v PostgreSQL.
information_schema.triggers
Zobrazit
Toto zobrazení obsahuje všechny funkce a procedury v aktuální databázi, které aktuální uživatel vlastní nebo má jiná oprávnění než SELECT
na.
Jeden ze sloupců v tomto zobrazení je event_object_table
, která obsahuje název tabulky, ve které je spouštěč definován.
Můžeme tedy použít toto zobrazení k získání spouštěčů pro konkrétní tabulku, jako je tato:
SELECT
trigger_schema,
trigger_name,
event_manipulation,
action_statement
FROM information_schema.triggers
WHERE event_object_table = 'film';
Příklad výsledku:
+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+ | 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() | +----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
Zobrazení vrací pouze ty spouštěče , které aktuální uživatel vlastní nebo má jiná oprávnění než SELECT
na, může výsledný seznam představovat pouze podmnožinu skutečných spouštěčů, které jsou definovány v tabulce.
pg_trigger
Katalog
pg_catalog.pg_trigger
katalog ukládá spouštěče v tabulkách a pohledech a není omezen pouze na tyto spouštěče které aktuální uživatel vlastní nebo má jiná oprávnění než SELECT
dne:
SELECT
tgname AS trigger_name
FROM
pg_trigger
WHERE
tgrelid = 'public.film'::regclass
ORDER BY
trigger_name;
Příklad výsledku:
+------------------------------+ | 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 | +------------------------------+
Chcete-li získat zdroj, můžeme zahrnout pg_proc
zobrazit v našem dotazu:
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;
Příklad výsledku:
+------------------------------+------------------------------------------+ | 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 | +------------------------------+------------------------------------------+
Mějte na paměti, že obsah pg_proc.prosrc
závisí na implementačním jazyce/konvenci volání. Může obsahovat skutečný zdrojový kód funkce pro interpretované jazyky, symbol odkazu, název souboru nebo prostě cokoliv jiného.
\dS
Příkaz
Při použití psql, \dS
příkaz je rychlý způsob, jak získat informace o tabulkách, pohledech atd., včetně všech spouštěčů, které jsou proti nim definovány.
K tomuto příkazu můžeme připojit název tabulky, abychom vrátili informace pouze o této tabulce:
\dS film
Příklad výsledku:
+----------------------+-----------------------------+-----------+----------+---------------------------------------+ | 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()