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_class
、pg_attribute
、pg_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;
我想知道哪个 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_class
、pg_attribute
、pg_namespace
中获取附加信息,等等
正如 Soni 指出的那样,在 information_schema.triggers
视图中有一个用户友好的界面。
information_schema.triggers
仅存储部分触发器定义。
您可以使用 pg_get_triggerdef()
:
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;