2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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 完成之後啟動。

  • 在由 SQL 命令(無論是普通函式還是觸發器)呼叫的函式中透過 SPI 執行的命令,將根據傳遞給 SPI 的讀/寫標誌遵循上述規則之一。以只讀模式執行的命令遵循第一條規則:它們無法看到呼叫命令的更改。以讀寫模式執行的命令遵循第二條規則:它們可以看到迄今為止所做的所有更改。

  • 所有標準的儲存過程語言都根據函式的易變性(volatility)屬性設定 SPI 讀寫模式。 STABLEIMMUTABLE 函式的命令以只讀模式執行,而 VOLATILE 函式的命令以讀寫模式執行。雖然 C 函式的作者可以違反此約定,但這樣做很可能不是一個好主意。

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

提交更正

如果您在文件中看到任何不正確之處、與您對特定功能的實際體驗不符之處,或需要進一步說明之處,請使用 此表單 報告文件問題。