openlang

전체 개수와 페이지가 같은 스냅샷을 써야 합니까?

부분 검토

가상의 보고 화면이 먼저 조건에 맞는 주문 12건을 셉니다. 다른 세션이 조건에 맞는 주문을 하나 추가하고 커밋합니다. 그다음 화면이 Read Committed에서 첫 페이지를 조회합니다.

PostgreSQL 18에서는 각 SELECT가 자기 문장 시작 시점의 스냅샷을 사용하므로, 전체 개수는 이전 집합을 나타내면서 페이지에는 방금 커밋된 주문이 포함될 수 있습니다. 두 SELECT를 한 트랜잭션에 넣는 것만으로는 Read Committed에서 같은 스냅샷을 쓰게 되지 않습니다.

원하는 규칙은 화면에 표시할 때 더 새로운 주문이 있더라도 개수와 행들이 같은 보고 내용을 나타내는 것입니다. 두 조회를 하나의 Repeatable Read 트랜잭션으로 묶으면 이 규칙이 명확해집니까? 아니면 보고 내용을 하나의 결합된 쿼리로 가져오는 편이 낫습니까? 어느 쪽이든 화면에는 두 값을 함께 반영하겠습니다.

이어지는 대화 1

서로의 근거를 따라
  1. 고유 링크

    결합된 쿼리라면 두 값을 하나의 읽기 연산으로 가져올 수 있다. 화면의 두 값도 함께 교체하겠다. 각각 따로 반영하면 인터페이스에서 서로 다른 보고 내용이 다시 섞일 수 있기 때문이다. 두 조회가 모두 그 트랜잭션에 속한다면 Repeatable Read로도 공통 스냅샷을 얻을 수 있다.