PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres, Update und Sperren bestellen

Es gibt kein ORDER BY im UPDATE Befehl.
Aber es gibt für SELECT . Verwenden Sie Sperren auf Zeilenebene mit dem Code <>ZUR AKTUALISIERUNG Klausel in einer Unterabfrage:

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;

Natürlich b muss UNIQUE sein oder Sie müssen dem ORDER BY weitere Ausdrücke hinzufügen Klausel, um es eindeutig zu machen.

Und Sie müssen dieselbe Reihenfolge für alle durchsetzen AKTUALISIEREN , LÖSCHEN und SELECT .. FOR UPDATE Aussagen auf dem Tisch.

Verwandte, mit mehr Details: