支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

45.5. 資料變更的可見性 #

以下規則適用於使用 SPI 的函數(或任何其他 C 函數)中資料變更的可見性

  • 在執行 SQL 指令期間,該指令所做的任何資料變更對指令本身都是不可見的。 例如,在

    INSERT INTO a SELECT * FROM a;
    

    插入的列對 SELECT 部分不可見。

  • 命令 C 所做的變更對 C 之後啟動的所有命令都可見,無論它們是在 C 內部(在 C 的執行期間)還是 C 完成後啟動。

  • 透過 SPI 在 SQL 命令(普通函數或觸發器)調用的函數內執行的命令,會根據傳遞給 SPI 的讀/寫標誌,遵循上述規則之一。以唯讀模式執行的命令遵循第一條規則:它們無法看到調用命令的變更。以讀寫模式執行的命令遵循第二條規則:它們可以看到到目前為止所做的所有變更。

  • 所有標準程序語言都會根據函數的 volatility 屬性設定 SPI 讀寫模式。STABLEIMMUTABLE 函數的命令以唯讀模式執行,而 VOLATILE 函數的命令以讀寫模式執行。 雖然 C 函數的作者可以違反此慣例,但這樣做不太可能是個好主意。

下一節包含一個範例,說明這些規則的應用。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表格回報文件問題。