sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres, actualizar y ordenar bloqueos

No hay ORDER BY en el UPDATE comando.
Pero hay para SELECT . Use bloqueo de nivel de fila con el FOR UPDATE cláusula en una 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;

Por supuesto, b tiene que ser UNIQUE o necesita agregar más expresiones al ORDER BY cláusula para que no sea ambigua.

Y debe hacer cumplir la misma orden para todos UPDATE , DELETE y SELECT .. FOR UPDATE declaraciones sobre la mesa.

Relacionado, con más detalles: