Nejprve minimálně měli byste provádět SELECT ... FOR UPDATE
takže zamknete řádky proti ostatním SELECT ... FOR [SHARE|UPDATE]
přístup. Musíte to udělat v rámci transakce a podržet tuto transakci, dokud neaktualizujete poslední řádek a commit
.
Řádky, které SELECT ... FOR UPDATE
ne uzamčeno proti normálnímu SELECT
; jsou stále čitelné pro ostatní transakce, které nepoužívají FOR UPDATE
nebo FOR SHARE
.
Ještě lépe, zkuste to celé přeformulovat jako UPDATE ... FROM
nebo jiná operace založená na sadě, kde veškerou práci provádíte v jediném dotazu. Obecně bude fungovat výrazně lépe než SELECT ... FOR UPDATE
následovaný streamem UPDATE
s.