이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 13.4. 응용 프로그램 수준에서의 토토 핫 일관성 검사버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

12.4. 롤 토토 일관성 검사 응용 프로그램 수준

독자가 때문에PostgreSQL트랜잭션 격리 수준에 관계없이 롤 토토를 잠그지 마십시오. 한 트랜잭션에 의해 읽는 것은 다른 동시에 쓸 수 있습니다. 거래. 다시 말해, 행이에 반환되는 경우select행이 여전히 있다는 것을 의미하지는 않습니다 순간에 현재 반환됩니다 (즉, 언젠가 현재 쿼리가 시작되었습니다). 행이 수정되거나 삭제되었을 수 있습니다 이 트랜잭션이 이미 커밋 된 트랜잭션에 의해 시작. 행이 여전히 유효하더라도"지금", 이전에 변경하거나 삭제할 수 있습니다 현재 거래는 커밋 또는 롤백을 수행합니다.

그것에 대해 생각하는 또 다른 방법은 각 거래가 롤 토토베이스 내용의 스냅 샷 및 동시에 실행됩니다 트랜잭션은 다른 스냅 샷을 잘 볼 수 있습니다. 그래서 전체 의 개념"지금"다소입니다 어쨌든 잘못 정의되었습니다. 이것은 일반적으로 큰 문제가 아닙니다 클라이언트 응용 프로그램은 서로 격리되지만 클라이언트는 롤 토토베이스 외부의 채널을 통해 통신 할 수 있습니다 심각한 혼란이 발생할 수 있습니다.

행의 현재 유효성을 보장하고이를 보호하기 위해 동시 업데이트를 사용해야합니다선택을 선택하십시오 업데이트또는 적절한잠금 테이블진술. (업데이트 선택그냥 잠금 동시 업데이트에 대한 반환 된 행,잠금 테이블전체 테이블을 잠그십시오.) 이것이해야합니다 응용 프로그램을 포팅 할 때 고려PostgreSQL다른 환경에서. (전에 버전 6.5postgresql중고 읽기 자물쇠, 따라서 위의 고려 사항은 또한 에서 업그레이드PostgreSQL6.5 이전 버전)

글로벌 타당성 검사에는 추가 사고가 필요합니다MVCC. 예를 들어, 은행 응용 프로그램은 모든 크레딧의 합계를 확인할 수 있습니다. 한 테이블은 둘 다 테이블이 적극적으로 업데이트되고 있습니다. 두 가지 결과를 비교합니다 연속SOLE SUM (...)명령 두 번째 이후로 읽은 커밋 모드에서 안정적으로 작동하지 않습니다. 쿼리는 계산되지 않은 거래 결과가 포함될 것입니다. 첫 번째. 단일 직렬화 가능한 두 합계를 수행합니다 거래는 직렬화 가능한 거래 전에 저지른 거래 시작 - 그러나 대답이 전달 될 때까지 여전히 관련이 있습니다. 직렬화 가능한 경우 거래 자체는 일관성 검사, 수표의 유용성이 더욱 논쟁의 여지가 있습니다. 그 이후로는 지금이지만 전부는 아닙니다 트랜잭션 후 시작 변경. 그러한 경우 신중한 사람 수표에 필요한 모든 테이블을 잠그고 싶을 수도 있습니다. 현재 현실에 대한 논란의 여지가없는 그림을 얻으십시오. 에이공유모드 (또는 더 높은) 잠금 장치는 그를 보장합니다 잠긴 테이블에서 커밋되지 않은 변경 사항은 없습니다. 현재 거래의.

또한 명백한 잠금에 의존하는 경우 동시 변경을 방지하고 읽기 커밋 된 모드를 사용해야합니다. 또는 직렬화 가능한 모드에서는 이전에 잠금 장치를 얻도록주의하십시오. 쿼리 수행. 직렬화 가능한 트랜잭션으로 얻은 잠금 표를 수정하는 다른 거래는 없음을 보장합니다 여전히 실행되지만 트랜잭션에서 스냅 샷이 보이는 경우 자물쇠를 얻는 사전에, 그것은 현재 커미션 된 일부를 사전 할 수 있습니다 테이블의 변경. 직렬화 가능한 트랜잭션의 스냅 샷은 다음과 같습니다 실제로 첫 번째 쿼리가 시작될 때 동결되거나 데이터 수정 명령 (select, 삽입, 업데이트, 또는삭제)이므로 얻을 수 있습니다 스냅 샷이 얼기 전에 명시 적으로 잠금.