PostgreSQL 9.3.1 中文手册 | ||||
---|---|---|---|---|
Prev | Up | Chapter 9. 函数和操作符 | Next |
当前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。