Выбор ответа Middle Транзакции и изоляция обновлено

Read Uncommitted в PostgreSQL

Вопрос

Что будет, если в PostgreSQL выполнить SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED и прочитать строку, которую другая транзакция изменила, но ещё не закоммитила?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Увидим старую версию, как в Read Committed. Стандарт разрешает грязное чтение на этом уровне, но не требует его.

Варианты ответа

  1. Увидим незакоммиченное новое значение (dirty read)
  2. Увидим старую версию, как в Read Committedправильный ответ
  3. Ошибка: этот уровень в PostgreSQL не поддерживается
  4. Чтение заблокируется до коммита другой транзакции

Разбор

Стандарт разрешает грязное чтение на этом уровне, но не требует его. В PostgreSQL благодаря MVCC грязного чтения нет совсем: уровень принимается без ошибки и ведёт себя как Read Committed. Чтение и не блокируется: читатели в MVCC не ждут писателей, они видят предыдущую версию строки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме