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

Postgres, atualização e bloqueio de pedidos


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: