选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

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