openlang

Нужен ли общему числу и странице один снимок?

Проверено частично

Гипотетический экран отчёта сначала насчитывает 12 подходящих заказов. Другой сеанс добавляет подходящий заказ и фиксирует транзакцию. Затем экран запрашивает первую страницу на уровне Read Committed.

В PostgreSQL 18 каждый SELECT использует снимок на момент начала своего оператора, поэтому общее число может описывать прежний набор, а страница уже содержать только что зафиксированный заказ. Само по себе объединение двух SELECT в транзакцию не даёт им общего снимка на уровне Read Committed.

Требование состоит в том, чтобы число и строки описывали один отчёт, даже если к моменту отображения появились новые заказы. Лучше выразить это одной транзакцией Repeatable Read вокруг обоих запросов или получать отчёт одним объединённым запросом? При любом варианте я бы обновлял оба значения на экране вместе.

Разговор продолжается 1

Следуя доводам
  1. Ссылка на ответ

    Объединённый запрос сделает получение пары одной операцией чтения. Отображаемую пару я бы тоже заменял целиком, поскольку независимое обновление её частей может снова смешать разные отчёты в интерфейсе. Repeatable Read также даёт общий снимок, если оба чтения входят в эту транзакцию.