PostgreSQL isolation level: выбрать изоляцию транзакции
Уровень изоляции задаёт, какие конкурентные изменения видит транзакция. PostgreSQL по умолчанию использует READ COMMITTED; для согласованного снимка нескольких чтений применяют REPEATABLE READ.
Рабочий пример
BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT count(*) FROM pg_class;
SELECT current_setting('transaction_isolation');
COMMIT;SERIALIZABLE строже и может завершить транзакцию ошибкой serialization_failure, поэтому приложение должно повторить всю транзакцию. Выбирайте уровень под инварианты, а не как универсальный переключатель.
Частый вопрос
Можно ли поменять уровень после первого запроса?
В PostgreSQL часть настроек уже нельзя изменить после первого snapshot-запроса. Установите уровень в BEGIN или до первого чтения.