25006: read_only_sql_transaction
PostgreSQL의미
읽기 전용 트랜잭션 안에서 데이터 수정 명령(INSERT/UPDATE/DELETE/DDL)을 시도했다. 트랜잭션이 읽기 전용으로 구성되어 있다. Class 25(invalid_transaction_state)에 속한다.
원인
SET TRANSACTION READ ONLY 또는 default_transaction_read_only=on 설정, 또는 가장 흔하게는 읽기 replica(hot standby / streaming replica)에 대한 쓰기 시도가 원인이다. standby 서버는 정의상 읽기 전용이다.
해결 방법
쓰기를 primary 서버로 라우팅하고, 읽기와 쓰기를 분리하는 연결 라우팅을 확인한다. 실수로 설정된 경우: SET TRANSACTION READ WRITE; 또는 서버 전체에서 default_transaction_read_only=off. 애플리케이션이 읽기-쓰기 트래픽을 올바른 노드로 보내는지 확인한다.