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
.