Avez-vous essayé UPDATE .. FROM
non standard de Postgres clause? J'imagine que cela fonctionnerait
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
Notez que je force genid()
à appeler exactement une fois par enregistrement dans mytable
dans la sous-sélection. Ensuite, j'auto-joins mytable
et gen
en utilisant un hypothétique id
colonne.Voir la documentation ici :
http://www.postgresql.org/docs/current/interactive /sql-update.html
Ceci semble n'avoir été introduit qu'avec Postgres 9.0. Si cela semble trop compliqué (c'est-à-dire pas très lisible), vous pouvez toujours recourir à pgplsql en tant qu'utilisateur Florin suggéré ici
.