我有一个表 needitems
如下:
itemid qty
5 10
3 20
我写了一个触发器,在插入/更新/删除时它会复制新记录并将其保存在表日志中:neededitems_log
。
问题是我还需要知道 productid。该信息在执行插入/更新/删除的函数中是可用的...但是在触发器中我无法访问它。执行插入/更新/删除的函数如何将变量传递给触发器? 如果做不到我能做什么?
以上面的例子...
假设函数 X 确实更新了 itemid 从 productid 5555 的数量 10 到数量 15...我想要 neededitems_log 显示:
itemid qty productid
5 15 5555
最佳答案
您不能将参数动态传递给触发器。任何干净的机制都是不可能的。很少有丑陋的方法—— session 变量和其他方法,但我不能建议它。当您觉得触发器需要额外的参数时,那么您的设计是错误的。所以不要这样做。
触发器在轻量级时很好用 - 触发器应该主要用于检查和审计。当您需要更复杂的工作时,您应该使用经典功能。函数的参数化更强,可维护性更好。太复杂的触发器是位陷阱,通常会导致严重的失败。
如果你真的需要它——那么 session 变量比其他丑陋的解决方案错误更少:
postgres=# do $$
begin
perform set_config('custom.var1', 10::text, true);
raise notice 'session variable var1 = %', current_setting('custom.var1');
end;
$$;
NOTICE: 00000: session variable var1 = 1
DO
关于sql - 如何给 PostgreSQL 中的 Trigger 函数提供参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33418756/