トランザクションは、BEGIN
またはSTART TRANSACTION
を使用して明示的に作成し、COMMIT
またはROLLBACK
を使用して終了します。
明示的なトランザクションの外側のSQL文は、自動的に単一文トランザクションを使用します。
各トランザクションは、一意のVirtualTransactionId
(あるいはvirtualXID
またはvxid
とも呼ばれます)で識別します。
これは、バックエンドID(またはbackendID
)と、localXID
と呼ばれる各バックエンドに固有の連続した番号で構成されます。
たとえば、仮想トランザクションID4/12532
のbackendID
は4
で、localXID
は12532
です。
非仮想TransactionId
(またはxid
)、例えば278394
は、PostgreSQLクラスタ内のすべてのデータベースが使用するグローバルカウンタからトランザクションに順番に割り当てられます。
この割り当ては、トランザクションがデータベースに最初に書き込みを行ったときに行われます。
これは、低い番号のxidが、より大きな番号のxidよりも前に書き込みを開始したことを意味します。
トランザクションが最初にデータベースに書き込みを行った順序は、トランザクションの開始順序とは異なるかもしれないことに注意してください。
特に、トランザクションがデータベース読み取りのみを実行する文で開始した場合にはそうなります。
内部トランザクションID型xid
は32ビット幅で、40億トランザクションごとに周回します。
32ビットエポックは各周回ごとに加算されます。
また、このエポックを含むために、インストールの寿命中には周回しない64ビット型xid8
もあり、キャストでxidに変換できます。
表 9.80の関数はxid8
値を返します。
XIDはPostgreSQLのMVCC同時実行機構とストリーミングレプリケーションの基礎として使用されます。
(非仮想)xidを持つトップレベルのトランザクションがコミットすると、pg_xact
ディレクトリにコミット済みとしてマークされます。
track_commit_timestampが有効な場合、追加情報がpg_commit_ts
ディレクトリに記録されます。
vxid
とxid
に加えて、準備されたトランザクションにはグローバルトランザクション識別子(GID)も割り当てられます。
GIDは最大200バイト長の文字列リテラルで、現在準備されている他のトランザクション中で一意でなければなりません。
GIDからxidへのマッピングはpg_prepared_xacts
に表示されます。