On this page
38.2. 数据更改的可见性
如果您在触发器函数中执行 SQL 命令,并且这些命令访问触发器所针对的表,则您需要了解数据可见性规则,因为它们确定这些 SQL 命令是否会看到触发器所包含的数据更改。开除。简要地:
语句级触发器遵循简单的可见性规则:语句级
BEFORE
触发器看不到语句所做的任何更改,而语句级AFTER
触发器可见所有修改。在行级
BEFORE
触发器中执行的 SQL 命令自然不引起触发器触发的数据更改(插入,更新或删除),因为尚未发生。但是,在行级
BEFORE
触发器中执行的 SQL 命令将看到先前在同一外部命令中处理过的行的数据更改的影响。这需要谨慎,因为这些变化事件的 Sequences 通常不可预测。影响多行的 SQL 命令可以按任何 Sequences 访问这些行。同样,行级
INSTEAD OF
触发器将看到由同一外部命令中的INSTEAD OF
触发器的先前触发引起的数据更改的影响。当触发行级
AFTER
触发器时,外部命令所做的所有数据更改都已完成,并且对调用的触发器函数可见。
如果您的触发函数是用任何标准过程语言编写的,则以上声明仅在声明为VOLATILE
的情况下适用。在任何情况下,声明为STABLE
或IMMUTABLE
的函数都不会看到调用命令所做的更改。
有关数据可见性规则的更多信息,请参见Section 46.4。 Section 38.4中的示例包含这些规则的演示。