Der er ingen ORDER BY
i OPDATERING
kommando.
Men der er for SELECT
. Brug låsning på rækkeniveau
med <-koden>TIL OPDATERING klausul
i en underforespørgsel:
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;
Selvfølgelig, b
skal være UNIQUE
eller du skal tilføje flere udtryk til ORDER BY
klausul for at gøre det utvetydigt.
Og du skal håndhæve den samme ordre for alle OPDATERING
, SLET
og VÆLG .. TIL OPDATERING
udsagn på bordet.
Relateret, med flere detaljer:
- Postgres OPDATERING … LIMIT 1
- Undgå PostgreSQL-deadlocks, når der udføres masseopdateringer og sletningsoperationer
- Optimering af samtidige opdateringer i Postgres