Primeiro, no mínimo você deve estar fazendo um
SELECT ... FOR UPDATE
então você bloqueia as linhas em relação a outros SELECT ... FOR [SHARE|UPDATE]
Acesso. Você deve fazer isso dentro de uma transação e manter essa transação até atualizar a última linha e commit
. As linhas que você
SELECT ... FOR UPDATE
não bloqueado contra SELECT
normal; eles ainda podem ser lidos por outras transações que não estão usando FOR UPDATE
ou FOR SHARE
. Melhor ainda, tente reformular a coisa toda como um
UPDATE ... FROM
ou outra operação baseada em conjunto onde você faz todo o trabalho em uma única consulta. Ele geralmente terá um desempenho muito melhor do que um SELECT ... FOR UPDATE
seguido por um fluxo de UPDATE
s.