PostgreSQL 數(shù)據(jù)改變的可見性

2021-09-06 10:59 更新

下列規(guī)則主導(dǎo)了使用 SPI 的函數(shù)(或者任何其他 C 函數(shù))中數(shù)據(jù)改變 的可見性:

  • 在一個 SQL 命令的執(zhí)行期間,該命令所作的任何數(shù)據(jù)更改對該命令本身 是不可見的。例如,在

    INSERT INTO a SELECT * FROM a;
    

    中,被插入的行對SELECT部分不可見。

  • 一個命令 C 所作的更改對所有在 C 之后開始的命令可見,不管它們是否 在 C 之中(在 C 的執(zhí)行期間)開始還是在 C 完成之后開始。

  • 在一個 SQL 命令(或者一個普通函數(shù)或者觸發(fā)器)調(diào)用的函數(shù)內(nèi)通過 SPI 執(zhí)行的命令遵循以上哪條規(guī)則取決于傳遞給 SPI 的讀/寫標(biāo)志。以 只讀模式執(zhí)行的命令遵循第一條規(guī)則:它們不能看到調(diào)用它們的命令的 改變。在讀寫模式中執(zhí)行的命令遵循第二條規(guī)則:它們能看見目前為止 所有的改變。

  • 所有的標(biāo)準(zhǔn)過程語言會基于函數(shù)的易變性屬性設(shè)置 SPI 讀寫模式。 STABLEIMMUTABLE函數(shù)的命令會以 只讀模式完成,而VOLATILE函數(shù)的命令會以讀寫模式 完成。雖然 C 函數(shù)的作者可以違反這種習(xí)慣,但是最好不要那樣做。

下一節(jié)包含一個關(guān)于這些規(guī)則應(yīng)用的例子:

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號