2025年9月25日: PostgreSQL 18 釋出!
支援的版本:當前 (18) / 17 / 16
開發版本:devel

67.1. 事務和識別符號 #

可以使用 BEGINSTART TRANSACTION 顯式建立事務,並使用 COMMITROLLBACK 結束事務。顯式事務外的 SQL 語句會自動使用單語句事務。

每個事務都由一個唯一的 VirtualTransactionId(也稱為 virtualXIDvxid)標識,它由一個後端程序號(或 procNumber)和一個在每個後端本地按順序分配的數字組成,稱為 localXID。例如,虛擬事務 ID 4/12532procNumber4localXID12532

非虛擬 TransactionId(或 xid),例如 278394,是從 PostgreSQL 叢集內所有資料庫使用的全域性計數器中按順序分配給事務的。當事務首次寫入資料庫時,就會發生此分配。這意味著編號較低的 xid 在編號較高的 xid 之前開始寫入。請注意,事務執行首次資料庫寫入的順序可能與事務開始的順序不同,特別是當事務以僅執行資料庫讀取的語句開始時。

內部事務 ID 型別 xid 是 32 位寬,並且每 40 億個事務會迴繞。在每次迴繞期間,會遞增一個 32 位的 epoch。還有一個 64 位型別 xid8,它包含這個 epoch,因此在安裝的生命週期內不會迴繞;可以透過強制轉換轉換為 xid。 表 9.84 中的函式返回 xid8 值。Xid 用作 PostgreSQLMVCC 併發機制和流複製的基礎。

當具有(非虛擬)xid 的頂級事務提交時,它會在 pg_xact 目錄中被標記為已提交。如果啟用了 track_commit_timestamp,則會在 pg_commit_ts 目錄中記錄其他資訊。

除了 vxidxid 之外,預備事務還被分配全域性事務識別符號(GID)。 GID 是長度最多為 200 位元組的字串文字,在其他當前預備事務中必須是唯一的。GID 到 xid 的對映顯示在 pg_prepared_xacts 中。

提交更正

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