Er is geen ORDER BY in de UPDATE commando.
Maar er is voor SELECT . Gebruik vergrendeling op rijniveau
met de FOR UPDATE clausule
in een subquery:
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;
Natuurlijk, b moet UNIQUE zijn of je moet meer uitdrukkingen toevoegen aan de ORDER BY clausule om het ondubbelzinnig te maken.
En je moet hetzelfde bevel afdwingen voor allemaal UPDATE , DELETE en SELECT .. FOR UPDATE uitspraken op tafel.
Gerelateerd, met meer details:
- Postgres-UPDATE … LIMIT 1
- PostgreSQL-deadlocks vermijden bij het uitvoeren van bulkupdate- en verwijderingsbewerkingen
- Concurrentie-updates optimaliseren in Postgres