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

Update mit Funktion, die einmal für jede Zeile in Postgres 8.4 aufgerufen wird

Haben Sie das nicht standardmäßige UPDATE .. FROM von Postgres ausprobiert Klausel? Ich stelle mir vor, das würde funktionieren

update mytable
   set a = first_part(gen.id),
       b = second_part(gen.id),
       c = third_path(gen.id)
  from (
          select genid() as genid, id
          from mytable 
          where package_id = 10
       ) gen
 where mytable.id = gen.id;
 --and package_id = 10 -- This predicate is no longer necessary as the subquery
                       -- already filters on package_id, as Erwin mentioned

Beachten Sie, dass ich genid() erzwinge genau einmal pro Datensatz in mytable aufgerufen werden innerhalb der Unterauswahl. Dann trete ich selbst mytable bei und gen mit einer hypothetischen id Spalte.Siehe die Dokumentation hier:

http://www.postgresql.org/docs/current/interactive /sql-update.html

Dies scheint jedoch erst mit Postgres 9.0 eingeführt worden zu sein. Wem das zu kompliziert (d. h. nicht sehr lesbar) erscheint, der kann als Benutzer immer noch auf pgplsql zurückgreifen Florin hier vorgeschlagen .