下列规则决定了使用 SPI 的函数(以及其他任何 C 函数)中数据更改的可见 性:
在某条 SQL 命令执行期间,该命令所做的任何数据更改对该命令本身都是不 可见的。例如,在
INSERT INTO a SELECT * FROM a;
中,被插入的行对SELECT部分不可见。
某条命令 C 所做的更改,对所有在 C 之后启动的命令都可见,无论这些命令 是在 C 内部(即 C 执行期间)启动,还是在 C 完成之后启动。
在由 SQL 命令调用的函数中(无论是普通函数还是触发器)通过 SPI 执行 的命令,究竟遵循上述哪条规则,取决于传给 SPI 的读写标志。只读模式下 执行的命令遵循第一条规则:它们看不到调用它们的命令所做的更改。读写模 式下执行的命令遵循第二条规则:它们能够看到截至当前为止的所有更改。
所有标准过程语言都会根据函数的易变性属性设置 SPI 的读写模式。 STABLE 和 IMMUTABLE 函数中的命 令会以只读模式执行,而 VOLATILE 函数中的命令则以 读写模式执行。虽然 C 函数作者能够违背这一约定,但通常并不是好主意。
下一节给出了一个展示这些规则如何应用的示例。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。