PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Mise à jour avec la fonction appelée une fois pour chaque ligne dans Postgres 8.4

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 .