Ответы пользователя по тегу PostgreSQL
  • Как защититься от двойного списания в многопоточном приложении?

    @sviato_slav
    Добавь в таблицу поле version.
    Делай все в транзакции (уровень не ниже - Read committed):
    1. При выборке строки из базы сохрани значение version у себя в программе.
    2. При апдейте делай так:
    Update ... set balance = balance - сумма покупки, version=version + 1 where version = сохраненное значение версии.
    3. Если запрос проходит успешно, то количество измененных строк = 1, если ничего не менялось = 0.
    Все это называется - optimistic locking
    Ответ написан
    Комментировать