Po pierwsze, minimum powinieneś wykonać SELECT ... FOR UPDATE
więc blokujesz wiersze przed innymi SELECT ... FOR [SHARE|UPDATE]
dostęp. Musisz to zrobić w ramach transakcji i wstrzymać tę transakcję, dopóki nie zaktualizujesz ostatniego wiersza i commit
.
Wiersze, które SELECT ... FOR UPDATE
nie zablokowane względem normalnego SELECT
; nadal są czytelne dla innych transakcji, które nie używają FOR UPDATE
lub FOR SHARE
.
Jeszcze lepiej, spróbuj przeformułować całość jako UPDATE ... FROM
lub inna operacja oparta na zbiorach, w której wykonujesz całą pracę w jednym zapytaniu. Generalnie będzie działać znacznie lepiej niż SELECT ... FOR UPDATE
po którym następuje strumień UPDATE
s.