我有以下查詢,以觸發對架構公衆中的所有表:檢查觸發存在
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;
而且我知道如何檢查是否觸發存在:
SELECT tgname
from pg_trigger
where not tgisinternal AND tgname='randomname'
但我怎麼能檢查第一個查詢是否存在同名的觸發器 - 並跳過創建並繼續?這裏是我的解決方案,但它不工作:
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
WHERE tab_name||'if_modified_trg' NOT IN (
SELECT tgname
from pg_trigger
where not tgisinternal);
[如何檢查PostgreSQL中是否存在觸發器?](http://stackoverflow.com/q/33174638/1995738) – klin