PostgreSQL 9.5.3 中文手册 | |||
---|---|---|---|
上一页 | 上一级 | 章 36. 触发器 | 下一页 |
如果你在你的触发器函数中执行 SQL 命令,并且这些命令会访问触发器所在的表,那么你需要注意数据可见性规则。因为这些规则决定了这些 SQL 命令是否将能看见引发触发器的数据改变。简单地:
语句级触发器遵循简单的可见性规则:一个语句所作的改变对于在该语句之前被调用的语句级触发器都不可见,而所有修改对于语句级AFTER触发器都是可见的。
导致触发器被引发的数据更改(插入、更新或删除)自然对于在一个行级BEFORE触发器中执行的 SQL 命令不可见,因为它还没有发生。
但是,在一个行级BEFORE触发器中执行的 SQL 命令将会看见之前在同一个外层命令中所作的数据更改的效果。这里需要小心,因为这些更改时间的顺序通常是不可预测的,一个影响多行的 SQL 命令可能以任何顺序访问这些行。
类似地,一个行级INSTEAD OF触发器将会看见之前在同一个外层命令中INSTEAD OF触发器引发所作的数据更改。
当一个行级AFTER触发器被引发时,所有由外层命令所作的数据更改已经完成,并且对于该被调用的触发器函数是可见的。
如果你的触发器函数使用任何一种标准过程语言编写的,那么只有在该函数被声明为VOLATILE时上述陈述才适用。被声明为STABLE或IMMUTABLE的函数在任何情况下将不能看到由调用命令所作出的更改。