На этом уровне изоляциии проверка и блокировка конкурентов происходит на стейтменте ( UPDATE ) а не во время commit(). Апдейты должны произойти последовательно updateDebit(tx1) , updateCredit(tx1), updateDebit(tx2), updateCredit(tx2), - а Select и проверка java будет строго после апдейтов каждая в своей транзакции
Если две транзакции изменили одно и то же состояние строки - закоммичена может быть только одна из них.
В PostgresSQL - изменяющий стейтмент (e.q. UPDATE) ожидает завершения параллельной транзакции изменившей ту же строку первее, а затем, перепроверит условие мэтча. В lock реализации - строка блокируется на запись до завершения транзакции.
Если две транзакции изменили одно и то же состояние строки - закоммичена может быть только одна из них.
В PostgresSQL - изменяющий стейтмент (e.q. UPDATE) ожидает завершения параллельной транзакции изменившей ту же строку первее, а затем, перепроверит условие мэтча. В lock реализации - строка блокируется на запись до завершения транзакции.
Замечание справедливое. Исправил вступление. Туториал c фокусом на понимание изоляций и свойств стэйтментов. В этой статье рассматриваю только проблему обновления двух счетов. Бухгалтерские системы гораздо сложнее.
На этом уровне изоляциии проверка и блокировка конкурентов происходит на стейтменте ( UPDATE ) а не во время commit(). Апдейты должны произойти последовательно updateDebit(tx1) , updateCredit(tx1), updateDebit(tx2), updateCredit(tx2), - а Select и проверка java будет строго после апдейтов каждая в своей транзакции
Если две транзакции изменили одно и то же состояние строки - закоммичена может быть только одна из них.
В PostgresSQL - изменяющий стейтмент (e.q. UPDATE) ожидает завершения параллельной транзакции изменившей ту же строку первее, а затем, перепроверит условие мэтча. В lock реализации - строка блокируется на запись до завершения транзакции.
Если две транзакции изменили одно и то же состояние строки - закоммичена может быть только одна из них.
В PostgresSQL - изменяющий стейтмент (e.q. UPDATE) ожидает завершения параллельной транзакции изменившей ту же строку первее, а затем, перепроверит условие мэтча. В lock реализации - строка блокируется на запись до завершения транзакции.
Большое спасибо, моя грубая ошибка - исправил
Оу, большое спасибо, исправил.
Спасибо, добавил пояснение что все блоки в одной транзакции
Спасибо. В этих примерах фантомные чтения не помешают. Но их можно будет рассмотреть на другой подобной задаче
Спасибо, добавил пояснение что все блоки в одной транзакции. спорный текст - также уточнил что я имел в виду.
Замечание справедливое. Исправил вступление. Туториал c фокусом на понимание изоляций и свойств стэйтментов. В этой статье рассматриваю только проблему обновления двух счетов. Бухгалтерские системы гораздо сложнее.