Опитвали ли сте нестандартното UPDATE .. FROM
на Postgres клауза? Предполагам, че това ще свърши работа
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
Имайте предвид, че налагам genid()
да се извиква точно веднъж на запис в mytable
в рамките на подизбора. След това се присъединявам самостоятелно към mytable
и gen
използвайки хипотетичен id
колона. Вижте документацията тук:
http://www.postgresql.org/docs/current/interactive /sql-update.html
Това обаче изглежда е въведено само с Postgres 9.0. Ако това изглежда твърде сложно (т.е. не е много четливо), пак можете да прибегнете до pgplsql като потребител Флорин предложи тук
.