数据改变的可视性

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 44. 服务器编程接口 | 下一页

# 44.4. 数据改变的可视性

下面规则决定使用 SPI(或者任何其它 C 函数)的函数里面的数据修改的可视性：

- 在一个 SQL 命令执行期间，任何这个命令做的数据改变都是命令本身所看不到的。 比如，在下面命令里：

      INSERT INTO a SELECT * FROM a;

  插入的行是`SELECT`部分看不到的。

- 命令 C 做的修改可以被 C 之后开始的所有命令看到，不管他们是在 C 里面 (在执行 C 期间)还是在 C 完成后开始的。

- 一个命令，如果是在一个 SQL 命令调用的函数(普通函数或者是触发器)里通过 SPI 执行的， 那么它遵循上面两个规则之一，具体哪个取决于传递给 SPI 的读/写标志。 以只读模式执行的命令遵循第一条规则：它们看不见调用它的命令做的修改。 以读写模式执行的规则遵循第二条规则：它们可以看到迄今为止所做的所有改变。

- 所有标准的过程语言都根据函数的易失性属性设置 SPI 读写模式。`STABLE` 和`IMMUTABLE`函数是以只读模式设置的，而`VOLATILE` 函数是以读写模式设置的。虽然其它 C 函数可以违反这个规定，但是这么做不是好事。

下一节里包含一些例子，演示了这些规则的应用。

上一页 | 起始页 | 下一页
SPI_freeplan | 上一级 | 例子