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