Jam*_*esD 14 postgresql triggers
有没有办法从Postgres中的所有表中删除所有触发器?我知道有一个pg_trigger表我可以看一下,但它看起来并不像我包含足够的信息来破译我添加到表中的触发器.
它看起来像外键约束出现在pg_trigger表中,我不想放弃.我只想从我的表中删除用户创建的触发器并保留FK.
有什么建议?
小智 22
谢谢,詹姆斯.
来自Postgres DB的Drop ALL触发功能?仅剥离第一个表中的事件,并在其他表中保留具有相同名称的触发器.这是固定功能:
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();
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个(基于此)而不是@kuznetso3v接受的答案,因为它让我有机会DROP STATEMENT在使用复制粘贴执行它们之前检查 s :
SELECT 'DROP TRIGGER ' || trigger_name || ' ON ' || event_object_table || ';'
FROM information_schema.triggers
WHERE trigger_schema = 'public';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9563 次 |
| 最近记录: |