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.