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