Hai provato UPDATE .. FROM
non standard di Postgres clausola? Immagino che funzionerebbe
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
Nota che sto forzando genid()
da chiamare esattamente una volta per record in mytable
all'interno della sottoselezione. Quindi mi unisco automaticamente a mytable
e gen
utilizzando un ipotetico id
colonna. Consulta la documentazione qui:
http://www.postgresql.org/docs/current/interactive /sql-aggiornamento.html
Questo sembra essere stato introdotto solo con Postgres 9.0, però. Se sembra troppo complicato (cioè non molto leggibile), puoi comunque ricorrere a pgplsql come utente Florin suggerito qui
.