可以使用 BEGIN
或 START TRANSACTION
顯式建立交易,並使用 COMMIT
或 ROLLBACK
結束交易。 顯式交易之外的 SQL 語句會自動使用單語句交易。
每個交易都由唯一的 VirtualTransactionId
(也稱為 virtualXID
或 vxid
)標識,它由後端的進程號(或 procNumber
)和一個按順序分配給每個後端的數字組成,該數字稱為 localXID
。 例如,虛擬交易 ID 4/12532
的 procNumber
為 4
,localXID
為 12532
。
非虛擬 TransactionId
(或 xid
),例如 278394
,是從 PostgreSQL 集群中所有資料庫使用的全域計數器,按順序分配給交易。 此分配發生在交易首次寫入資料庫時。 這意味著編號較小的 xid 在編號較高的 xid 之前開始寫入。 請注意,交易執行其首次資料庫寫入的順序可能與交易開始的順序不同,特別是如果交易一開始只執行資料庫讀取的語句。
內部交易 ID 類型 xid
的寬度為 32 位元,並且每隔 40 億個交易就會循環。 每次循環時,都會遞增一個 32 位元的 epoch。 還有一個 64 位元類型 xid8
,其中包括此 epoch,因此在安裝的生命週期內不會循環; 可以透過轉換將其轉換為 xid。 表 9.82 中的函數會傳回 xid8
值。 Xid 用作 PostgreSQL 的 MVCC 並行機制和串流複寫的基礎。
當具有(非虛擬)xid 的頂層交易提交時,它會在 pg_xact
目錄中標記為已提交。 如果啟用track_commit_timestamp,則會在 pg_commit_ts
目錄中記錄其他資訊。
除了 vxid
和 xid
之外,預備交易還會被分配全域交易識別符 (GID)。 GID 是最多 200 個位元組的字串常值,在目前準備好的其他交易中必須是唯一的。 GID 到 xid 的對應關係顯示在 pg_prepared_xacts
中。
如果您在文件中看到任何不正確、與您使用特定功能的體驗不符或需要進一步澄清的內容,請使用此表單報告文件問題。