Não há
ORDER BY no UPDATE comando.Mas existe para
SELECT . Use bloqueio em nível de linha
com o FOR UPDATE cláusula
em uma subconsulta:UPDATE foo f
SET a = 1
FROM (
SELECT b FROM foo
WHERE b IN (1,2,3,4)
ORDER BY b
FOR UPDATE
) upd
WHERE f.b = upd.b; Claro,
b tem que ser UNIQUE ou você precisa adicionar mais expressões ao ORDER BY cláusula para torná-la inequívoca. E você precisa aplicar a mesma ordem para todos
UPDATE , DELETE e SELECT .. FOR UPDATE declarações na mesa. Relacionado, com mais detalhes:
- Atualização do Postgres … LIMITE 1
- Evitando impasses do PostgreSQL ao realizar operações de atualização e exclusão em massa
- Otimizando atualizações simultâneas no Postgres