©
This document uses PHP Chinese website manual Release
当前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。