如何在PostgreSQL中为触发器函数指定参数?
我有一个表如何在PostgreSQL中为触发器函数指定参数?,sql,postgresql,Sql,Postgresql,我有一个表needitems,如下所示: itemid qty 5 10 3 20 我编写了一个触发器,在insert/update/delete时,它将复制new记录并将其保存在表日志中:neededitems\u log 问题是我还需要知道productid。这些信息在执行插入/更新/删除操作的函数中是不可靠的。。。但是在触发器中,我无法访问它。插入/更新/删除的函数如何将变量传递给触发器? 如果做不到我能做什么 用上面的例子 假设函数X确实将prod
needitems
,如下所示:
itemid qty
5 10
3 20
我编写了一个触发器,在insert/update/delete时,它将复制new记录并将其保存在表日志中:neededitems\u log
问题是我还需要知道productid。这些信息在执行插入/更新/删除操作的函数中是不可靠的。。。但是在触发器中,我无法访问它。插入/更新/删除的函数如何将变量传递给触发器?
如果做不到我能做什么
用上面的例子
假设函数X确实将productid 5555的itemid从数量10更新到数量15。。。我想要这个
需要EditEMS\u日志来显示:
itemid qty productid
5 15 5555
无法将参数动态传递给触发器。这是不可能的任何清洁机制。很少有丑陋的方法——会话变量和其他方法,但我无法给出建议。如果您觉得有必要为触发器添加额外的参数,那么您的设计是错误的。所以不要这样做 当触发器很轻时,它们很好-触发器应该主要用于检查和审核。当您需要更复杂的工作时,应该使用经典函数。功能参数化更强,可维护性更好。太复杂的触发器是位陷阱,通常是大失败 如果您真的需要它,那么会话变量比其他丑陋的解决方案错误更少:
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