某些表具有触发功能:
CREATE TRIGGER x
AFTER INSERT OR UPDATE OR DELETE
ON tab_1 FOR EACH ROW
EXECUTE PROCEDURE trige2();
基本上如果我知道表名,我可以很容易地获得触发器,因为它在PgAdmin的表属性中。
但是如果我只知道触发器过程名trige2
并且我想得到触发器被调用的所有表的列表,那该怎么办呢。
在上面的示例中,结果应为tab_1
答案 0 :(得分:1)
这可以通过加入pg_trigger,pg_class和pg_proc
来完成SELECT ps.nspname as function_schema,
p.proname as trigger_function,
ts.nspname as table_schema,
tbl.relname as table_name,
trg.tgname as trigger_name
FROM pg_trigger trg
JOIN pg_class tbl on tbl.oid = trg.tgrelid
JOIN pg_namespace ts on ts.oid = tbl.relnamespace
JOIN pg_proc p on p.oid = trg.tgfoid
JOIN pg_namespace ps on ps.oid = p.pronamespace
通过上述内容,您可以通过使用where tbl.relname = 'tab_1'
提供表名或使用where trg.tgname = 'x'
提供触发器名称或提供函数名称来获取信息:where p.proname = 'trige2'