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