172 похожих чатов

Евгений, нельзя этого сделать. Чтобы защититься от параллельного добавления строк

в таблицу transactions нужно заблокировать предикат "WHERE user_id=?", а в постгресе так нельзя. Можно заблокировать таблицу transactions целиком, но тогда всё встрянет

8 ответов

16 просмотров

Значит остается advisory_lock как наиболее производительный вариант и все получается?

Нет, для обеспечения consistency не нужно ничего блокировать. Кроме блокировок существуют другие методы обеспечения изоляции, понимаете?

alex-che Автор вопроса
Yaroslav Schekin
Нет, для обеспечения consistency не нужно ничего б...

Сейчас я понимаю, что у автора XYZ-story, и надо уточнять, что вообще происходит, и чего хотите получить. Но тогда я ответил на конкретный вопрос: "как сделать так, чтобы на момент коммита нашей транзакции, было соответствие между записанной суммой и реальной?"

alex che
Сейчас я понимаю, что у автора XYZ-story, и надо у...

Эээ.... кого вообще волнуют "моменты"? ;) Они, строго говоря, не имеют отношения к тому, как работает изоляция примерно во всех (многопользовательских) ACID СУБД. Важно то, в каком состоянии транзакции способны увидеть базу, не более того. Т.е. если транзакция_2 выполняется параллельно "нашей транзакции", совершенно неважно, увидит она базу по состоянию до или после "нашей транзакции". Более того, во (всех?) реализациях MVCC это именно "до".

Yaroslav Schekin
Нет, для обеспечения consistency не нужно ничего б...

А что на счет lost update ? Ну допустим у меня 2 транзакции и первая завершилась позже второй, то тут снова кривой баланс?

Evgeny Kungurov
А что на счет lost update ? Ну допустим у меня 2 т...

Во-первых -- баланс в любом случае будет прямой! И в любом случае это будет прямой баланс на какой-то момент в прошлом. Во-вторых -- c read committed вторая транзакцыя дождётся результата первой. В остальных isolation level она откатится.

Ilya Anfimov
Во-первых -- баланс в любом случае будет прямой! И...

Я почему то думал что при лаге сети или еще чего-то порядок трандакций не гарантирован и вторая может завершиться раньше первой

Evgeny Kungurov
Я почему то думал что при лаге сети или еще чего-т...

Эта последовательность вообще крайне мало зависит от лагов в сети.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта