sql >> Base de Datos >  >> RDS >> PostgreSQL

Actualice con la función llamada una vez para cada fila en Postgres 8.4

¿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í .