9.27. 触发功能

当前 PostgreSQL 提供了一个内置的触发函数suppress_redundant_updates_trigger,与正常行为(不管数据是否已更改)始终执行更新的正常行为相反,该函数不会发生任何实际上不会更改行中数据的更新。 (此正常行为使更新运行更快,因为不需要检查,并且在某些情况下也很有用.)

理想情况下,通常应避免运行实际上不会更改 Logging 数据的更新。冗余更新可能会花费大量不必要的时间,尤其是如果有很多要更改的索引,并且死行中的空间最终将被清除时,尤其如此。但是,在 Client 端代码中检测这种情况并不总是容易的,甚至是不可能的,并且编写表达式来检测它们可能容易出错。一种替代方法是使用suppress_redundant_updates_trigger,这将跳过不更改数据的更新。但是,您应该谨慎使用它。触发器为每个记录花费的时间很短,但很重要,因此,如果实际上更改了受更新影响的大多数记录,则使用此触发器实际上会使更新的运行速度变慢。

suppress_redundant_updates_trigger函数可以添加到这样的表中:

CREATE TRIGGER z_min_update
BEFORE UPDATE ON tablename
FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger();

在大多数情况下,您可能希望在每一行最后触发该触发器。请记住,按名称 Sequences 触发触发器,然后您将选择一个触发器名称,该名称应在表上可能具有的任何其他触发器的名称之后。

有关创建触发器的更多信息,请参见CREATE TRIGGER