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

Opdater med funktion kaldet én gang for hver række i Postgres 8.4

Har du prøvet Postgres' ikke-standardiserede UPDATE .. FROM klausul? Jeg forestiller mig, at dette ville virke

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

Bemærk, at jeg tvinger genid() skal kaldes nøjagtigt én gang pr. post i mytable inden for underudvalget. Så melder jeg mig selv ind i mytable og gen ved hjælp af et hypotetisk id kolonne. Se dokumentationen her:

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

Dette synes dog kun at være blevet introduceret med Postgres 9.0. Hvis det virker for kompliceret (dvs. ikke særlig læseligt), kan du stadig ty til pgplsql som bruger Florin foreslået her .



  1. SQL, spørgsmål om joinforbindelse

  2. Ser frem til PGConf India 2017

  3. Arbejde med ikke-ASCII JDBC-data i Talend

  4. Reparer korrupt database postgresql