Назад к вопросам
IT One
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 ------------------------
Компании, где спрашивали
Ответ от нейросети
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
Это поведение обеспечивает повторяемость чтения и предотвращает фантомные чтения и неповторяющиеся чтения в рамках одной транзакции.