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
.