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