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:
https://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
.