Postgres 触发器

Postgres triggers

我想知道哪个 table 存储触发器的创建语句,例如

CREATE TRIGGER t_update_sal
  AFTER INSERT OR UPDATE
  ON employees
  FOR EACH ROW
  EXECUTE PROCEDURE t_update_sal_v1();

您可以在 information_schema.triggers 上挖掘该信息。

没有 table 存储触发器的 "create statement"。 SQL 被解析、执行并丢弃。

pg_dump 从系统目录中重新构造语句:主要是 pg_catalog.pg_trigger,并从 pg_classpg_attributepg_namespace 中获取附加信息,等等

正如 Soni 指出的那样,在 information_schema.triggers 视图中有一个用户友好的界面。

information_schema.triggers 仅存储部分触发器定义。

您可以使用 pg_get_triggerdef():

获取触发器的完整 SQL
select trg.tgname, 
       pg_catalog.pg_get_triggerdef(trg.oid, true)
from pg_trigger trg
  join pg_class tbl on trg.tgrelid = tbl.oid
  join pg_namespace sch on tbl.relnamespace = sch.oid
where tbl.relname = 'employees'
  and sch.nspname = 'public'
order by 1;