9.25. 触发器函数

当前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