38.2. 数据更改的可见性

如果您在触发器函数中执行 SQL 命令,并且这些命令访问触发器所针对的表,则您需要了解数据可见性规则,因为它们确定这些 SQL 命令是否会看到触发器所包含的数据更改。开除。简要地:

  • 语句级触发器遵循简单的可见性规则:语句级BEFORE触发器看不到语句所做的任何更改,而语句级AFTER触发器可见所有修改。

  • 在行级BEFORE触发器中执行的 SQL 命令自然引起触发器触发的数据更改(插入,更新或删除),因为尚未发生。

  • 但是,在行级BEFORE触发器中执行的 SQL 命令看到先前在同一外部命令中处理过的行的数据更改的影响。这需要谨慎,因为这些变化事件的 Sequences 通常不可预测。影响多行的 SQL 命令可以按任何 Sequences 访问这些行。

  • 同样,行级INSTEAD OF触发器将看到由同一外部命令中的INSTEAD OF触发器的先前触发引起的数据更改的影响。

  • 当触发行级AFTER触发器时,外部命令所做的所有数据更改都已完成,并且对调用的触发器函数可见。

如果您的触发函数是用任何标准过程语言编写的,则以上声明仅在声明为VOLATILE的情况下适用。在任何情况下,声明为STABLEIMMUTABLE的函数都不会看到调用命令所做的更改。

有关数据可见性规则的更多信息,请参见Section 46.4Section 38.4中的示例包含这些规则的演示。