给定一个触发器函数名称 - 如何获取它所设置的表?

时间:2016-07-11 06:19:44

标签: sql postgresql

某些表具有触发功能:

CREATE TRIGGER x
  AFTER INSERT OR UPDATE OR DELETE
  ON tab_1  FOR EACH ROW
  EXECUTE PROCEDURE trige2();

基本上如果我知道表名,我可以很容易地获得触发器,因为它在PgAdmin的表属性中。

但是如果我只知道触发器过程名trige2并且我想得到触发器被调用的所有表的列表,那该怎么办呢。

在上面的示例中,结果应为tab_1

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'