PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres, aggiorna e blocca l'ordine

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: