小编Avo*_*nes的帖子

检查触发器是否存在

我对公共模式中所有表的触发器有以下查询:

SELECT 'CREATE TRIGGER ' || tab_name|| '_if_modified_trg INSERT OR UPDATE OR DELETE ON  ' || tab_name|| ' FOR EACH ROW EXECUTE PROCEDURE audit.if_modified_func(); ' AS trigger_creation_query
FROM (
   SELECT quote_ident(table_schema) || '.' || quote_ident(table_name) as  tab_name
   FROM information_schema.tables
   WHERE table_schema='public'
   ) AS foo;
Run Code Online (Sandbox Code Playgroud)

我知道如何检查触发器是否存在:

SELECT tgname
from pg_trigger
where not tgisinternal AND tgname='randomname'
Run Code Online (Sandbox Code Playgroud)

但是,如何在第一个查询中检查同名触发器是否已存在 - 并跳过创建它并继续?这是我的解决方案,但它不起作用:

SELECT 'CREATE TRIGGER ' || tab_name|| '_if_modified_trg INSERT OR UPDATE OR DELETE ON  ' || tab_name|| ' FOR EACH ROW EXECUTE PROCEDURE audit.if_modified_func(); …
Run Code Online (Sandbox Code Playgroud)

postgresql dynamic-sql plpgsql database-trigger

5
推荐指数
2
解决办法
7628
查看次数