Вопрос проверяет знание стандартного поведения PostgreSQL при работе с транзакциями и конкурентным доступом к данным.
В PostgreSQL по умолчанию используется уровень изоляции Read Committed. Это означает, что транзакция видит только зафиксированные данные. Каждое SQL-выражение внутри транзакции видит актуальное состояние данных на момент своего выполнения. Грязные чтения не допускаются. Такой уровень обеспечивает хороший баланс между корректностью и производительностью.
Read Committed — уровень изоляции, при котором запрос видит только те данные, которые были зафиксированы до начала выполнения этого запроса.
PostgreSQL использует MVCC, поэтому:
Каждое выражение SELECT видит снимок данных
Снимок создается в момент начала выполнения выражения
Следующий SELECT в той же транзакции может увидеть новые зафиксированные данные
При уровне Read Committed:
запрещены dirty read
возможны non-repeatable read
возможны phantom read
PostgreSQL использует Read Committed по умолчанию, потому что он:
достаточно безопасен для большинства приложений
хорошо масштабируется
минимизирует блокировки
Read Committed — практичный уровень изоляции по умолчанию в PostgreSQL, подходящий для большинства OLTP-сценариев.