🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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](#calibre_link-459)。