08007 transaction resolution unknown 는?
PostgreSQL 에러 코드 08007 transaction resolution unknown은 2단계 커밋(Two-Phase Commit, 2PC) 과정에서 트랜잭션의 최종 상태(커밋 또는 롤백 여부)를 결정할 수 없을 때 발생하는 에러입니다. 분산 트랜잭션 환경에서 PREPARE TRANSACTION 이후 네트워크 장애, 코디네이터 크래시, 또는 참여 노드 간의 통신 단절이 발생하면 해당 트랜잭션이 "미결(in-doubt)" 상태로 남게 됩니다. 이 상태에서 PostgreSQL은 트랜잭션을 커밋해야 할지 롤백해야 할지 독자적으로 판단할 수 없기 때문에, 외부 개입 없이는 자동으로 해결되지 않아 운영 환경에서 심각한 장애로 이어질 수 있습니다.
주요 발생 원인
1. 2단계 커밋 코디네이터(Coordinator) 장애
분산 트랜잭션에서 코디네이터 역할을 하는 미들웨어(예: Java의 JTA, Pgpool-II, 또는 커스텀 애플리케이션)가 PREPARE TRANSACTION을 실행한 이후 크래시되거나 네트워크 연결이 끊어지면, 참여 PostgreSQL 노드는 트랜잭션의 최종 결정을 통보받지 못합니다. 이 경우 pg_prepared_xacts 시스템 뷰에 해당 트랜잭션이 지속적으로 남아 있게 되고, 관련 잠금(lock)이 해제되지 않아 다른 트랜잭션이 블로킹되는 연쇄 장애가 발생할 수 있습니다.













