Dưới đây là ba tùy chọn để liệt kê các trình kích hoạt cho một bảng nhất định trong PostgreSQL.
information_schema.triggers
Xem
Dạng xem này chứa tất cả các hàm và thủ tục trong cơ sở dữ liệu hiện tại mà người dùng hiện tại sở hữu hoặc có một số đặc quyền ngoài SELECT
trên.
Một trong các cột trong chế độ xem này là event_object_table
, chứa tên của bảng mà trình kích hoạt được xác định trên đó.
Do đó, chúng tôi có thể sử dụng chế độ xem này để lấy các trình kích hoạt cho một bảng cụ thể như sau:
SELECT
trigger_schema,
trigger_name,
event_manipulation,
action_statement
FROM information_schema.triggers
WHERE event_object_table = 'film';
Kết quả ví dụ:
+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+ | 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() | +----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
Việc xem như chế độ xem chỉ trả về những trình kích hoạt mà người dùng hiện tại sở hữu hoặc có một số đặc quyền ngoài SELECT
trên, danh sách kết quả chỉ có thể đại diện cho một tập hợp con các trình kích hoạt thực tế được xác định trên bảng.
pg_trigger
Danh mục
pg_catalog.pg_trigger
danh mục lưu trữ các trình kích hoạt trên các bảng và chế độ xem, và nó không giới hạn ở chỉ những trình kích hoạt mà người dùng hiện tại sở hữu hoặc có một số đặc quyền ngoài SELECT
trên:
SELECT
tgname AS trigger_name
FROM
pg_trigger
WHERE
tgrelid = 'public.film'::regclass
ORDER BY
trigger_name;
Kết quả ví dụ:
+------------------------------+ | 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 | +------------------------------+
Để lấy nguồn, chúng tôi có thể bao gồm pg_proc
xem trong truy vấn của chúng tôi:
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;
Kết quả ví dụ:
+------------------------------+------------------------------------------+ | 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 | +------------------------------+------------------------------------------+
Hãy nhớ rằng nội dung của pg_proc.prosrc
cột phụ thuộc vào ngôn ngữ triển khai / quy ước gọi. Nó có thể chứa mã nguồn thực của hàm cho các ngôn ngữ được thông dịch, ký hiệu liên kết, tên tệp hoặc bất kỳ thứ gì khác.
\dS
Lệnh
Khi sử dụng psql, \dS
lệnh là một cách nhanh chóng để lấy thông tin về bảng, dạng xem, v.v., bao gồm bất kỳ trình kích hoạt nào được xác định dựa trên chúng.
Chúng ta có thể nối tên bảng vào lệnh này để trả về thông tin chỉ về bảng đó:
\dS film
Kết quả ví dụ:
+----------------------+-----------------------------+-----------+----------+---------------------------------------+ | 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()