¿Ha probado UPDATE .. FROM
no estándar de Postgres? ¿cláusula? Imagino que esto funcionaría
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
Tenga en cuenta que estoy forzando genid()
para ser llamado exactamente una vez por registro en mytable
dentro de la subselección. Entonces me uniré a mytable
y gen
usando un hipotético id
columna. Ver la documentación aquí:
http://www.postgresql.org/docs/current/interactive /sql-update.html
Sin embargo, parece que esto se introdujo solo con Postgres 9.0. Si eso parece demasiado complicado (es decir, no muy legible), aún puede recurrir a pgplsql como usuario Florin sugirió aquí
.