Har du prøvet Postgres' ikke-standardiserede UPDATE .. FROM
klausul? Jeg forestiller mig, at dette ville virke
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
Bemærk, at jeg tvinger genid()
skal kaldes nøjagtigt én gang pr. post i mytable
inden for underudvalget. Så melder jeg mig selv ind i mytable
og gen
ved hjælp af et hypotetisk id
kolonne. Se dokumentationen her:
http://www.postgresql.org/docs/current/interactive /sql-update.html
Dette synes dog kun at være blevet introduceret med Postgres 9.0. Hvis det virker for kompliceret (dvs. ikke særlig læseligt), kan du stadig ty til pgplsql som bruger Florin foreslået her
.