可以使用 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.84 中的函式返回 xid8
值。Xid 用作 PostgreSQL 的 MVCC 併發機制和流複製的基礎。
當具有(非虛擬)xid 的頂級事務提交時,它會在 pg_xact
目錄中被標記為已提交。如果啟用了 track_commit_timestamp,則會在 pg_commit_ts
目錄中記錄其他資訊。
除了 vxid
和 xid
之外,預備事務還被分配全域性事務識別符號(GID)。 GID 是長度最多為 200 位元組的字串文字,在其他當前預備事務中必須是唯一的。GID 到 xid 的對映顯示在 pg_prepared_xacts
中。
如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用此表格報告文件問題。