Primero, al mínimo deberías estar haciendo SELECT ... FOR UPDATE
por lo que bloquea las filas contra otros SELECT ... FOR [SHARE|UPDATE]
acceso. Debe hacer esto dentro de una transacción y retener esa transacción hasta que actualice la última fila y commit
.
Las filas que SELECT ... FOR UPDATE
no bloqueado contra normal SELECT
; todavía son legibles para otras transacciones que no usan FOR UPDATE
o FOR SHARE
.
Mejor aún, trate de reformular todo como UPDATE ... FROM
u otra operación basada en conjuntos en la que haces todo el trabajo en una sola consulta. Por lo general, funcionará mucho mejor que un SELECT ... FOR UPDATE
seguido de una secuencia de UPDATE
s.