sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres, uppdatering och låsbeställning

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:



  1. Återställ PostgreSQL db från säkerhetskopia utan problem med främmande nyckel

  2. Python cx_Oracle SQL med bindsträngsvariabel

  3. Skillnaden mellan klustrade och icke-klustrade index

  4. mysqli_connect():(HY000/2003):Kan inte ansluta till MySQL-servern på 'domännamn' (111)