问题报告 纠错本页面

9.27. 触发器函数

当前PostgreSQL提供一个内建的触发器函数,suppress_redundant_updates_trigger, 其将阻止任何不会实际更改行中的数据发生,相反不管数据是否已经改变始终执行的更新这种不正常的行为。 (这是正常的行为,使得更新运行速度更快,因为不需要检查,并在某些情况下也是有用的。)

理想的情况下,你通常应该避免运行实际上并没有改变记录中的数据的更新。 冗余更新会花费大量不必要的时间,尤其是如果有大量索引要改变, 并且最终将不得不清空死行中的空间。然而,在客户端代码检测这种情况并不总是容易的或甚至可能的, 而写表达式以检测到它们容易产生错误。另一种方法是使用suppress_redundant_updates_trigger, 它可以跳过不改变数据的更新。不过你应该小心使用这个命令。触发器为每条记录花费小但有意义的时间, 所以如果更新实际改变会影响大多数记录,那么此触发器的使用将实际上使更新运行得更慢。

suppress_redundant_updates_trigger函数可以添加到一个表:

CREATE TRIGGER z_min_update
BEFORE UPDATE ON tablename
FOR EACH ROW EXECUTE PROCEDURE suppress_redundant_updates_trigger();

在大多数情况下,你可能想要在每行的后面触发这个触发器。记住触发器是以名字的顺序触发的, 你应该在表中你有的任何其他触发器后面选择一个触发器名字。

更多有关创建触发器的信息请参阅CREATE TRIGGER