有没有办法从 Postgres 的所有表中删除所有触发器?我知道有一个我可以查看的 pg_trigger 表,但它看起来没有包含足够的信息让我破译我添加到我的表中的触发器。
外键约束似乎也出现在 pg_trigger 表中,我不想删除它。我只想从我的表中删除用户创建的触发器并保留 FK。
有什么建议吗?
最佳答案
谢谢,詹姆斯。
函数来自 Drop ALL triggers from Postgres DB?仅从第一个表中删除出现的事件,并在其他表中保留具有相同名称的触发器。这是固定函数:
CREATE OR REPLACE FUNCTION strip_all_triggers() RETURNS text AS $$ DECLARE
triggNameRecord RECORD;
triggTableRecord RECORD;
BEGIN
FOR triggNameRecord IN select distinct(trigger_name) from information_schema.triggers where trigger_schema = 'public' LOOP
FOR triggTableRecord IN SELECT distinct(event_object_table) from information_schema.triggers where trigger_name = triggNameRecord.trigger_name LOOP
RAISE NOTICE 'Dropping trigger: % on table: %', triggNameRecord.trigger_name, triggTableRecord.event_object_table;
EXECUTE 'DROP TRIGGER ' || triggNameRecord.trigger_name || ' ON ' || triggTableRecord.event_object_table || ';';
END LOOP;
END LOOP;
RETURN 'done';
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
select strip_all_triggers();
关于postgresql - 从 Postgres DB 中删除所有触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3093214/