Какой уровень изоляции транзакций по умолчанию в PostgreSQL
Что проверяют
Знаете ли вы конкретный факт и понимаете ли, что он значит на практике. Часто это проверка внимательности: во многих других СУБД значение другое.
Как отвечать
По умолчанию READ COMMITTED.
Что это означает: каждый запрос внутри транзакции видит снимок данных на момент своего начала, а не на момент начала транзакции. Поэтому грязного чтения нет, а неповторяемое чтение и фантомы возможны: два одинаковых SELECT в одной транзакции могут вернуть разное, если между ними кто-то зафиксировал изменения.
Полезно добавить сравнение: в MySQL с InnoDB по умолчанию REPEATABLE READ, в SQL Server тоже READ COMMITTED, но реализация там на блокировках, а в PostgreSQL на MVCC, из-за чего читатели и писатели друг друга не блокируют.
Ещё одна деталь, которая отличает знающего: в PostgreSQL уровень READ UNCOMMITTED объявлен, но фактически работает как READ COMMITTED, грязного чтения в нём нет вовсе.
И практическое: начиная с REPEATABLE READ PostgreSQL может отклонить фиксацию с ошибкой сериализации, поэтому переключать уровень имеет смысл только вместе с логикой повтора транзакции в приложении.
Где спотыкаются
Называют REPEATABLE READ, путая с MySQL.
Знают уровень, но не могут сказать, какие аномалии он допускает.
Думают, что в PostgreSQL есть настоящий READ UNCOMMITTED.
Меняют уровень на SERIALIZABLE без обработки ошибок сериализации и получают случайные сбои.