首页 > 解决方案 > 获取调用某个函数的所有触发器

问题描述

因此,插入违反了约束,因为触发器在这种情况下不应该修改数据。

问题是,我已经禁用了我认为导致此问题的触发器,并且该函数仍然被调用。

如何最好地获得我缺少的触发器?

请注意,该函数是在触发器函数内调用的,因此

SELECT * FROM information_schema.triggers WHERE action_statement LIKE '%my_function%';

什么都不返回;

标签: postgresqltriggersdatabase-triggerpostgresql-9.6

解决方案


要查找哪个触发器使用了某个触发器功能,请查询目录:

SELECT tgname,
       tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'my_trigger_function'::regproc;

如果你说的函数不是正确的触发函数,而是从触发函数调用的,事情就更难了。

由于c和以外的语言中的函数internal存储为字符串,因此 PostgreSQL 不跟踪函数之间的依赖关系。

所以在这种情况下你能做的最好的就是子字符串搜索:

SELECT oid::regprocedure
FROM pg_proc
WHERE prosrc ILIKE '%myfuncname%';

推荐阅读