74.4. Two-Phase Transactions #
PostgreSQL supports a two-phase commit (2PC) protocol that allows multiple distributed systems to work together in a transactional manner. The commands are PREPARE TRANSACTION
, COMMIT PREPARED
and ROLLBACK PREPARED
. Two-phase transactions are intended for use by external transaction management systems. PostgreSQL follows the features and model proposed by the X/Open XA standard, but does not implement some less often used aspects.
When the user executes PREPARE TRANSACTION
, the only possible next commands are COMMIT PREPARED
or ROLLBACK PREPARED
. In general, this prepared state is intended to be of very short duration, but external availability issues might mean transactions stay in this state for an extended interval. Short-lived prepared transactions are stored only in shared memory and WAL. Transactions that span checkpoints are recorded in the pg_twophase
directory. Transactions that are currently prepared can be inspected using pg_prepared_xacts
.