Sobes.tech
Senior
57

Zadanie #3 Jaki będzie wynik w sesji Session #1? Połączenie z bazą danych z tabelą t z linią INSERT INTO t(id,val) VALUES (3,'c'); COMMIT; Sesja #1 ------------------------ psql> BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- T1 ------------------------ Sesja #2 ------------------------ psql(T2)> UPDATE t SET val='c2' WHERE id=3; COMMIT; ------------------------ Sesja #1 ------------------------ psql(T1)> SELECT id,val FROM t WHERE id=3 ------------------------

Firmy, w których zadano pytania
IT OneIT One

Odpowiedź od AI

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

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