PostgreSQL isolation level: выбрать изоляцию транзакции

Категория: Postgresql · Язык: SQL · Обновлено:

Уровень изоляции задаёт, какие конкурентные изменения видит транзакция. PostgreSQL по умолчанию использует READ COMMITTED; для согласованного снимка нескольких чтений применяют REPEATABLE READ.

Рабочий пример

SQL
BEGIN ISOLATION LEVEL REPEATABLE READ;
SELECT count(*) FROM pg_class;
SELECT current_setting('transaction_isolation');
COMMIT;

SERIALIZABLE строже и может завершить транзакцию ошибкой serialization_failure, поэтому приложение должно повторить всю транзакцию. Выбирайте уровень под инварианты, а не как универсальный переключатель.

Частый вопрос

Можно ли поменять уровень после первого запроса?

В PostgreSQL часть настроек уже нельзя изменить после первого snapshot-запроса. Установите уровень в BEGIN или до первого чтения.