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.