PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres, mise à jour et commande de verrouillage

Il n'y a pas de ORDER BY dans la UPDATE commande.
Mais il y en a pour SELECT . Utilisez verrouillage au niveau de la ligne avec le FOR UPDATE clause dans une sous-requête :

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;

Bien sûr, b doit être UNIQUE ou vous devez ajouter plus d'expressions au ORDER BY clause pour la rendre sans ambiguïté.

Et vous devez appliquer la même commande pour tous UPDATE , DELETE et SELECT .. FOR UPDATE déclarations sur la table.

Connexe, avec plus de détails :