Det finns ingen ORDER BY
i UPPDATERING
kommando.
Men det finns för SELECT
. Använd låsning på radnivå
med <-koden>FÖR UPPDATERING klausul
i en underfråga:
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;
Naturligtvis b
måste vara UNIQUE
eller så måste du lägga till fler uttryck i ORDER BY
klausul för att göra det entydigt.
Och du måste genomdriva samma ordning för alla UPPDATERA
, DELETE
och VÄLJ .. FÖR UPPDATERING
uttalanden på bordet.
Relaterat, med mer information:
- Postgres UPPDATERING … LIMIT 1
- Undvika dödlägen i PostgreSQL när man utför massuppdateringar och raderingsåtgärder
- Optimera samtidiga uppdateringar i Postgres