As linhas são bloqueadas na ordem do
ORDER BY
cláusula como estava quando a tabela foi verificada . A consulta é executada e as linhas ordenadas, então o PostgreSQL bloqueia as linhas em ordem. Essencialmente,
ORDER BY
acontece antes de FOR UPDATE
. Agora pode acontecer que bloqueie um bloco de linha devido a bloqueios mantidos por transações simultâneas. Se isso acontecer, e estamos no
READ COMMITTED
nível de isolamento, PostgreSQL aguarda até conseguir o cadeado e buscar a versão atual da linha, que ele bloqueia. Se a transação concorrente modificou as colunas que definem a ordenação, o resultado final não estará na ordem definida por
ORDER BY
.