↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4
历史版本。 PostgreSQL 9.6 已结束支持。 2021-11-11. 请参阅 当前版本手册.

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。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.