2015-10-29 36 views
2

我有一个表needitems如下:如何给PostgreSQL中的触发函数提供参数?

itemid qty 
    5  10 
    3  20 

我写了一个触发器,在插入/更新/删除将复制记录并保存在一个表日志:neededitems_log

事情是,我也需要知道productid。这些信息在插入/更新/删除功能中是可变的...但是在触发器中,我无法访问它。插入/更新/删除的函数如何将一个变量传递给触发器? 如果它不能做我能做什么?

与上面的例子...

假设函数X做了更新上的itemid从数量10的productid 5555的数量15 ...我想 neededitems_log显示:

itemid qty productid 
    5  15 5555 

回答

0

您无法动态地将参数传递给触发器。使用任何清洁机制都是不可能的。有几个丑陋的方法 - 会话变量和其他,但我不能建议。当你感觉触发器需要额外的参数时,那么你的设计是错误的。所以不这样做

当触发器很亮时触发器很好 - 触发器应该主要用于检查和审计。当你需要更复杂的工作时,你应该使用经典功能。函数的参数化要强得多,可维护性要好得多。过于复杂的触发器是位陷阱,通常很大的失败。

如果你真的需要它 - 那么会话变量比其他丑陋的解决方案少错:

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 
相关问题