55P03: lock_not_available
PostgreSQL의미
요청한 락을 즉시 획득하지 못했다. 보통 다른 세션이 보유한 락을 NOWAIT로 요청했거나 lock_timeout이 만료되었을 때 발생한다.
원인
SELECT ... FOR UPDATE NOWAIT 또는 LOCK TABLE ... NOWAIT 사용 중 행/테이블이 잠겨 있음, 또는 lock_timeout 만료. 대부분의 경우 긴 트랜잭션이 락을 보유하고 있다.
해결 방법
블로킹 세션을 찾는다: pg_locks와 pg_stat_activity를 조인한다(대기/블로킹 관계). 긴 트랜잭션을 완료하거나 필요하면 pg_terminate_backend(pid)로 종료한다. NOWAIT 대신 적절한 lock_timeout으로 대기하고 재시도 로직을 추가한다. 트랜잭션을 짧게 해 락 보유 시간을 줄인다.