PostgreSQL 18, уровень Read Committed, два сеанса. Экран отчёта насчитывает 12 подходящих заказов. Другой сеанс вставляет подходящий заказ и фиксирует его. Затем экран получает первую страницу.
Каждый SELECT берёт снимок в момент начала своего оператора. Итог описывает прежнее множество, а на странице уже есть заказ, зафиксированный в промежутке. Если обернуть оба SELECT в транзакцию, ничего не изменится, потому что при Read Committed каждый оператор всё равно получает свежий снимок.
Нужное правило узкое. Количество и строки описывают один и тот же отчёт, даже если к моменту просмотра появились более новые заказы. И на экран эта пара попадает вместе.
Одна транзакция Repeatable Read вокруг обоих чтений даёт им общий снимок. Один объединённый запрос делает их одним чтением. Какой вариант выражает правило яснее?