Транзакция одна. Снимки разные
Транзакция одна. Снимки разные Отчёт считает оплаченные заказы и их сумму двумя SELECT. В PostgreSQL 18 при READ COMMITTED эти числа могут относиться к разным наборам. Вымышленный пример с учебной orders (status, amount). Сессия A: BEGIN; SHOW transaction_isolation; SELECT count(*) FROM orders WHERE status = 'paid'; -- B добавила paid-заказ и выполнила COMMIT. SELECT sum(amount) FROM orders WHERE status = 'paid'; COMMIT; При READ COMMITTED первый SELECT не видит новый заказ, второй включает его сумму: у каждого SELECT без блокирующих оговорок свой снимок на начало запроса. Это учебная последовательность, не замер на вашем сервере. Развилка: запросы в одной сессии и транзакции? Если нет — проверьте соединение. Если да — SHOW transaction_isolation и требование: единый срез или свежие данные каждого шага. Для единого среза объедините агрегаты в один SELECT либо используйте короткую REPEATABLE READ READ ONLY транзакцию. Её снимок в этом примере фиксирует первый SELECT данных, не BEGIN. Завершайте её после чтения. Ошибка — ждать от BEGIN единого снимка. Изоляцию выбирают под операцию; внешние API её гарантий не получают. Сохраните проверку уровня и условий отчёта для практического разбора PostgreSQL при подготовке обучения в УЦ ФОРС. #PostgreSQL #SQL #УЦФОРС VK | Телеграм | Сайт