PostgreSQL admite un protocolo de confirmación de dos fases
(2PC) que permite que múltiples sistemas distribuidos trabajen juntos de manera
transaccional. Los comandos son PREPARE TRANSACTION,
COMMIT PREPARED y ROLLBACK PREPARED.
Las transacciones de dos fases están destinadas a ser utilizadas por sistemas externos de
gestión de transacciones. PostgreSQL sigue las características
y el modelo propuesto por el estándar X/Open XA, pero no implementa algunos aspectos
menos utilizados.
Cuando el usuario ejecuta PREPARE TRANSACTION, los únicos comandos
siguientes posibles son COMMIT PREPARED o ROLLBACK PREPARED.
En general, se pretende que este estado preparado sea de muy corta duración, pero los
problemas de disponibilidad externa podrían hacer que las transacciones permanezcan en este estado
durante un intervalo prolongado. Las transacciones preparadas de corta duración se almacenan
únicamente en la memoria compartida y en el WAL. Las transacciones que abarcan puntos de control
(checkpoints) se registran en el directorio pg_twophase. Las transacciones
que están preparadas actualmente se pueden inspeccionar usando pg_prepared_xacts.