Sobes.tech
Назад к вопросам
Senior
6

Задача #3 Какой результат будет в сессии Session #1? Подключение к БД с таблицей t с строкой INSERT INTO t(id,val) VALUES (3,'c'); COMMIT; Session #1 ------------------------ psql> BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- T1 ------------------------ Session #2 ------------------------ psql(T2)> UPDATE t SET val='c2' WHERE id=3; COMMIT; ------------------------ Session #1 ------------------------ psql(T1)> SELECT id,val FROM t WHERE id=3 ------------------------

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

sobes.tech AI

В режиме изоляции REPEATABLE READ транзакция T1 видит снимок данных на момент начала транзакции и не видит изменений, сделанных другими транзакциями после её начала.

Сценарий:

  • В Session #1 (T1) начинается транзакция с уровнем REPEATABLE READ.
  • В Session #2 (T2) обновляется строка с id=3 и коммитится.
  • В Session #1 выполняется SELECT для id=3.

Результат SELECT в T1 будет таким, каким была строка на момент начала транзакции T1, то есть val='c'. Обновление, сделанное в T2 после начала T1, не будет видно в T1 до коммита или новой транзакции.

Таким образом, в Session #1 будет:

id | val
---+-----
3  | c

Это поведение обеспечивает повторяемость чтения и предотвращает фантомные чтения и неповторяющиеся чтения в рамках одной транзакции.