왜냐하면 독자들이포스트그레스트랜잭션 격리 수준, 데이터에 관계없이 데이터를 잠그지 마십시오. 한 트랜잭션이 읽은 내용을 다른 트랜잭션이 동시에 덮어쓸 수 있음 거래. 즉, 행이에 의해 반환되는 경우선택행이 다음 위치에 아직 존재한다는 의미는 아닙니다. 반환된 시간(즉, 현재 시점 이후의 시점) 거래가 시작되었습니다); 행이 수정되었거나 삭제되었을 수 있습니다. 이 트랜잭션 이후에 커밋된 이미 커밋된 트랜잭션에 의해 시작되었습니다. 행이 "현재" 여전히 유효한 경우에도 현재 트랜잭션이 커밋을 수행하기 전에 변경되거나 삭제되었습니다. 또는 롤백합니다.
생각하는 또 다른 방법은 각 거래가 데이터베이스 내용의 스냅샷 및 동시에 실행 트랜잭션은 다른 스냅샷을 볼 수 있습니다. 그래서 전체 어쨌든 "지금"이라는 개념은 다소 의심스럽습니다. 이건 보통이 아니야 클라이언트 애플리케이션이 각각에서 분리되면 큰 문제가 됩니다. 그러나 클라이언트가 외부 채널을 통해 통신할 수 있는 경우 그러면 데이터베이스에 심각한 혼란이 발생할 수 있습니다.
행의 현재 존재를 확인하고 보호하기 위해 동시 업데이트에 대해 사용해야 합니다선택 업데이트용또는 적절한잠금 표성명. (업데이트를 위해 선택동시 업데이트에 대해 반환된 행만 잠그는 반면락 테이블테이블 전체를 보호합니다.) 이 애플리케이션을 다음으로 포팅할 때 고려해야 합니다.포스트그레스다른 사람으로부터 환경.
참고:버전 6.5 이전포스트그레읽기 잠금을 사용했기 때문에 위의 고려 사항은 6.5로 업그레이드하는 경우에도 마찬가지입니다. (또는 그 이상) 이전부터포스트그레버전.