PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

As linhas estão bloqueadas em ordem em uma instrução SELECT ... ORDER BY ... FOR UPDATE?


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 .