74.4. Двухфазные транзакции #
PostgreSQL поддерживает протокол двухфазной фиксации (2PC), позволяющий нескольким распределённым системам работать в транзакционной манере. В рамках этого протокола используются следующие команды: PREPARE TRANSACTION
, COMMIT PREPARED
и ROLLBACK PREPARED
. Двухфазные транзакции предназначены для использования внешними системами управления транзакциями. PostgreSQL придерживается особенностей и модели, предложенных в рамках стандарта X/Open XA, однако не применяет некоторые редко используемые аспекты.
Когда пользователь выполняет команду PREPARE TRANSACTION
для подготовки транзакции, следующим шагом он может выполнить только команду COMMIT PREPARED
или ROLLBACK PREPARED
. Как правило, транзакции могут находиться в таком подготовленном состоянии очень непродолжительное время, однако ввиду проблем внешней доступности они могут сохранять такое состояние несколько дольше. Подготовленные транзакции с коротким временем жизни хранятся только в общей памяти и журнале WAL. Транзакции, которые проходят контрольные точки, записываются в каталог pg_twophase
. Подготовленные транзакции можно просмотреть в представлении pg_prepared_xacts
.