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

Pav*_* V. 3 postgresql triggers stored-procedures

假设我有一个触发器函数,但它的代码非常复杂,因此将其拆分为更多过程会很方便。我想在所有变量中使用 NEW (或 OLD 对于 UPDATE/DELETE 触发器)变量进行操作。是否有其他方法可以将其作为函数参数发送到从原始触发函数调用的每个过程?

Den*_*rdy 5

如果您确实需要传递它们,我确信您可以将其作为适当类型的记录(例如newrow tablename%ROWTYPE)。

http://www.postgresql.org/docs/current/static/plpgsql-declarations.html

也就是说,除非您运行大型查询,其结果在整个触发器函数中使用,否则将触发器分解为更小的部分通常比调用子函数更干净。请注意,您可以有条件地执行触发器,例如:

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();
Run Code Online (Sandbox Code Playgroud)

执行上述操作时要记住的事情是,在 Postgres 中(与 sql 规范相反),触发器按字母顺序执行,而不是按创建顺序执行。