PostgreSQL 資料修改的可視性規則:在查詢執行過程中, 由查詢本身造成的資料修改 (通過 SQL-函數,SPI-函數,觸發器)對查詢掃描而言是不可見的. 例如,在查詢
INSERT INTO a SELECT * FROM a;
裡,插入的元組對 SELECT 的掃描是不可見的.實際上, 這麼做在資料庫內部形成非遞歸的資料庫表的復制 (當然是要受到唯一索引規則的制約的).
由查詢 Q 造成的改變可以為查詢 Q 以後運行的查詢可見,不管這些查詢 是在查詢 Q 內部開始運行(在 Q 運行期間)的還是Q運行完畢後開始運行的.
這些對觸發器而言也是正確的,盡管被插入的元組 (tg_trigtuple)對 BEFORE 觸發器是不可見的, 這個剛被插入的元組卻可以被一個 AFTER 觸發器看到, 並且對所有這個(觸發器)以後的所有 BEFORE/AFTER 觸發器均可見!