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:
- ACTUALIZACIÓN de Postgres... LÍMITE 1
- Evitar interbloqueos de PostgreSQL al realizar operaciones de actualización y eliminación masivas
- Optimización de actualizaciones simultáneas en Postgres