PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Aggiorna con la funzione chiamata una volta per ogni riga in Postgres 8.4

Hai provato UPDATE .. FROM non standard di Postgres clausola? Immagino che funzionerebbe

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

Nota che sto forzando genid() da chiamare esattamente una volta per record in mytable all'interno della sottoselezione. Quindi mi unisco automaticamente a mytable e gen utilizzando un ipotetico id colonna. Consulta la documentazione qui:

http://www.postgresql.org/docs/current/interactive /sql-aggiornamento.html

Questo sembra essere stato introdotto solo con Postgres 9.0, però. Se sembra troppo complicato (cioè non molto leggibile), puoi comunque ricorrere a pgplsql come utente Florin suggerito qui .