如何将NEW / OLD传递给PostgreSQL中从触发器函数调用的过程?

时间:2013-05-03 12:26:43

标签: postgresql stored-procedures triggers

假设我有一个触发器函数,但它的代码非常复杂,将它拆分为更多程序会很方便。我希望在所有这些变量中使用NEW(或OLD for UPDATE / DELETE triggers)变量。是否可以将其作为函数参数发送到从原始触发函数调用的每个过程?

1 个答案:

答案 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规范相反),触发器按字母顺序执行,而不是按照创建的顺序执行。