假设我有一个触发器函数,但它的代码非常复杂,将它拆分为更多程序会很方便。我希望在所有这些变量中使用NEW(或OLD for UPDATE / DELETE triggers)变量。是否可以将其作为函数参数发送到从原始触发函数调用的每个过程?
答案 0 :(得分:3)
如果你真的需要传递它们,我很确定你可以将它作为适当类型的记录(例如newrow tablename%ROWTYPE
)。
http://www.postgresql.org/docs/current/static/plpgsql-declarations.html
那就是说,除非你运行巨大的查询,你在整个触发器函数中使用它的结果,将触发器分成更小的部分通常比调用子函数imho更干净。请注意,您可以有条件地执行触发器,例如:
create trigger "01_do_stuff_upd" on update after tablename
for each row
when (old.field <> new.field and ...)
execute procedure do_stuff_upd_part_01();
在执行上述操作时要注意的是,在Postgres中(与sql规范相反),触发器按字母顺序执行,而不是按照创建的顺序执行。