говорят, что я хочу выполнить следующие транзакции в режиме фиксации чтения (в postgres).
T1: r(A) -> w(A)
T2: r(A) -> w(A)
Если операции вызваны в следующем порядке:
r1(A)->r2(A)->w1(A)->c1->w2(A)->c2
Я бы ожидал, что T2 должен ждать в r (A). Потому что T1 установил бы эксклюзивную блокировку для A при первом чтении, потому что он хочет написать это позже. Но с MVCC нет никаких блокировок чтения?
Теперь у меня есть 2 вопроса:
Если я использую JDBC для чтения некоторых данных, а затем выполняю отдельную команду для вставки прочитанных данных. Как база данных узнает, что она должна сделать исключительную блокировку, когда она только читает? Насколько я знаю, увеличение блокировки чтения до блокировки записи не допускается в 2PL.
Я думаю, мои предположения неверны ... Где этот сценарий ждет или одна транзакция прервана? Чтение незафиксированных данных не должно допускать потерю обновлений, но я не вижу, как это может работать.
Я был бы счастлив, если бы кто-нибудь мог мне помочь. Спасибо