Non c'è ORDER BY
nel UPDATE
comando.
Ma c'è per SELECT
. Usa blocco a livello di riga>
con FOR UPDATE
clausola
in una sottoquery:
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;
Naturalmente, b
deve essere UNIQUE
oppure devi aggiungere più espressioni a ORDER BY
clausola per renderlo univoco.
E devi far rispettare lo stesso ordine per tutti UPDATE
, DELETE
e SELECT .. FOR UPDATE
dichiarazioni sul tavolo.
Correlati, con maggiori dettagli:
- AGGIORNAMENTO Postgres … LIMITE 1
- Evitare i deadlock di PostgreSQL durante l'esecuzione di operazioni di aggiornamento ed eliminazione in blocco
- Ottimizzazione degli aggiornamenti simultanei in Postgres