두 트랜잭션이 반대 순서로 잠글 때
트랜잭션 A가 행 X를 잡고 Y를 기다리는데 B는 Y를 잡고 X를 기다리면 순환이 생겨. PostgreSQL은 이를 감지해 한쪽을 중단하고 40P01 deadlock_detected 오류를 돌려줘.
행 2개를 다루는 순서를 통일해
코드 경로마다 항상 행 1을 먼저, 행 2를 나중에 잠그면 같은 일을 하는 트랜잭션끼리 교착 상태가 생기지 않아. 실제 교착 상태 대부분은 이 순서 불일치의 변형이야.
40P01은 재시도할 수 있는 오류야
모든 교착을 미리 없앨 수는 없어. 40P01을 만나면 트랜잭션 전체를 버리고 잠깐 기다린 뒤 다시 실행해. 행 1·2를 다루는 두 경로 모두 같은 규칙을 따르는지 감사해야 해.