Перейти к содержимому
4 / 15

Какие уровни изоляции транзакций бывают и какие аномалии на каждом возможны?

Изоляция определяет, что транзакция видит из параллельных изменений; уровни описывают через аномалии — грязное чтение, неповторяемое чтение, фантомы. В PostgreSQL благодаря MVCC грязного чтения нет ни на одном уровне, а работают три: READ COMMITTED (по умолчанию) берёт снимок на каждый оператор, поэтому возможны неповторяемое чтение и фантомы; REPEATABLE READ держит один снимок на транзакцию, но при конфликте записи падает с ошибкой сериализации; SERIALIZABLE добавляет защиту от write skew. Отдельно стоит потерянное обновление: если приложение читает значение, меняет его в коде и пишет обратно, уровень изоляции не спасёт — нужен SELECT FOR UPDATE, атомарный UPDATE или версия строки. И начиная с REPEATABLE READ нужна логика повтора.

Какие уровни изоляции транзакций бывают и какие аномалии на каждом возможны? | JScriptiser