# 9.28.触发功能
虽然触发器的许多用途都涉及用户编写的触发器函数,但PostgreSQL提供了一些内置的触发器函数,可以直接用于用户定义的触发器。总结如下:表9.99(存在其他内置触发器函数,它们实现外键约束和延迟索引约束。由于用户不需要直接使用它们,因此此处不记录这些约束。)
有关创建触发器的更多信息,请参阅创建触发器.
表9.99.内置触发函数
作用 描述 示例用法 |
---|
抑制冗余更新触发器 ( ) →触发 抑制不执行任何更新操作。详情见下文。 创建触发器。。。抑制冗余更新触发器() |
tsvector_更新_触发器 ( ) →触发 自动更新 tsvector 关联纯文本文档列中的列。要使用的文本搜索配置由名称指定为触发器参数。看见第12.4.3节详细信息。CREATE TRIGGER ... tsvector_update_trigger(tsvcol, 'pg_catalog.swedish', title, body) |
tsvector_update_trigger_column ( ) →扳机 自动更新一个 向量 来自关联的纯文本文档列的列。要使用的文本搜索配置取自注册配置 表的列。看第 12.4.3 节详情。CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol, tsconfigcol, title, body) |
这抑制冗余更新触发器
函数,当作为行级应用时更新前
触发器,将阻止任何不会实际更改行中数据的更新发生。这会覆盖无论数据是否已更改,始终执行物理行更新的正常行为。(这种正常行为使更新运行得更快,因为不需要检查,并且在某些情况下也很有用。)
理想情况下,您应该避免运行不会实际更改记录中数据的更新。冗余更新可能会花费大量不必要的时间,特别是如果有很多索引要更改,并且死行中的空间最终必须被清理掉。然而,在客户端代码中检测这种情况并不总是容易的,甚至是不可能的,编写表达式来检测它们可能容易出错。另一种方法是使用抑制冗余更新触发器
,这将跳过不更改数据的更新。但是,您应该小心使用它。触发器为每条记录花费一小段时间,因此如果大多数受更新影响的记录确实发生了变化,则使用此触发器将使更新平均运行得更慢。
这抑制冗余更新触发器
函数可以像这样添加到表中:
CREATE TRIGGER z_min_update
BEFORE UPDATE ON tablename
FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger();
在大多数情况下,您需要为每一行最后触发此触发器,以便它不会覆盖可能希望更改该行的其他触发器。请记住触发器按名称顺序触发,因此您将选择一个触发器名称,该名称位于您可能在表上的任何其他触发器的名称之后。(因此示例中的“z”前缀。)