PostgreSQL 교착 상태에 대해 조금 혼란 스럽습니다.업데이트를 실행할 때 PostgreSQL의 교착 상태가 발생했습니다.
전형적인 교착 상태의 예입니다 : 내가 코드를 변경
-- Transaction 1
UPDATE customer SET ... WHERE id = 1
UPDATE customer SET ... WHERE id = 2
-- Transaction 2
UPDATE customer SET ... WHERE id = 2
UPDATE customer SET ... WHERE id = 1
하지만 경우에 다음과 같이
-- Transaction 1
UPDATE customer SET ... WHERE id IN (1, 2)
-- Transaction 2
UPDATE customer SET ... WHERE id IN (1, 2)
여기 교착 상태의 가능성이 될 것인가?
본질적으로 내 질문은 : 두 번째 경우에 PostgreSQL은 행을 하나씩 잠 그거나 WHERE
조건에서 다루는 전체 범위를 잠급니다?
미리 감사드립니다.
고마워요! 위의 예는 교착 상태가 발생할 수 있습니다. 두 트랜잭션에서 행이 처리되는 순서를 모르기 때문에 교착 상태가 발생할 수 있습니다. – vyakhir
드물지만 교착 상태가 발생할 수 있습니다. 첫 번째 예제 (명시 적으로 다른 주문 선택)와는 대조적으로 일반적인 경우가 있습니다. 테이블을 갱신하는 모든 트랜잭션의 지속 기간 동안 적절한 강도의 테이블 레벨 잠금을 취함으로써 교착 상태를 제외 할 수 있지만 치료가 질병보다 더 나을 수 있습니다. 자세한 내용은 내가 참조한 문서 섹션을 참조하십시오. – kgrittn
그러나 행이 업데이트되었지만 전체 UPDATE 문이 아직 완료되지 않은 후에 PostgreSQL 릴리스 잠금이 작동합니까? 즉, 우리가 과 같은 성명을 가지고 있다면 UPDATE ... 어디에서 id (1, 2, 3, 5) postgresql 업데이트 후, ID = 1 행과 id = 2, 행 id = 1을 해제하겠습니까? 그렇다면 필요한 경우 어떻게 행을 롤백 할 것입니까? – vyakhir