| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 39. 伺服器編程接口 | Fast Forward | Next |
下面規則決定使用 SPI(或者任何其它 C 函數)的函數里面的資料修改的可讀性:
在一個 SQL 命令執行期間,任何這個命令做的資料改變都是命令本身所看不到的。 比如,在下面命令裡
INSERT INTO a SELECT * FROM a;
插入的行是 SELECT 部分看不到的
命令 C 做的修改可以被 C 之後開始的所有命令看到,不管他們是在 C 裡面(在執行 C 期間)還是在 C 完成後開始的。
一個命令,如果是在一個 SQL 命令調用的函數(普通函數或者是觸發器)裡透過 SPI 執行的, 那麼它遵循上面兩個規則之一,具體哪個取決於傳遞給 SPI 的讀/寫標誌。 以只讀模式執行的命令遵循第一條規則:它們看不見調用它的命令做的修改。 以讀寫模式執行的規則遵循第二條規則:它們可以看到迄今為止所做的所有改變。
所有標準的過程語言都根據函數的易失性屬性設置 SPI 讀寫模式。 STABLE 和 IMMUTABLE 函數是以只讀模式設置的, 而 VOLATILE 函數是以讀寫模式設置的。雖然其它 C 函數可以違法這個規定, 但是這麼做不是好事。
下一節裡包含一些例子,演示了這些規則的應用。