Първо, минимум трябва да правите SELECT ... FOR UPDATE
така че заключвате редовете срещу други SELECT ... FOR [SHARE|UPDATE]
достъп. Трябва да направите това вътре в транзакция и да задържите тази транзакция, докато актуализирате последния ред и commit
.
Редовете, които SELECT ... FOR UPDATE
не заключен срещу нормален SELECT
; те все още са четими за други транзакции, които не използват FOR UPDATE
или FOR SHARE
.
Още по-добре, опитайте се да перифразирате всичко като UPDATE ... FROM
или друга базирана на набор операция, при която вършите цялата работа в една заявка. Като цяло ще работи значително по-добре от SELECT ... FOR UPDATE
последвано от поток от UPDATE
с.