支援的版本:目前 (17) / 16
開發版本:devel

66.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.82 中的函數會傳回 xid8 值。 Xid 用作 PostgreSQLMVCC 並行機制和串流複寫的基礎。

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

除了 vxidxid 之外,預備交易還會被分配全域交易識別符 (GID)。 GID 是最多 200 個位元組的字串常值,在目前準備好的其他交易中必須是唯一的。 GID 到 xid 的對應關係顯示在 pg_prepared_xacts 中。

提交更正

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