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