sql >> Databasteknik >  >> RDS >> PostgreSQL

Uppdatering med funktion som anropas en gång för varje rad i Postgres 8.4

Har du testat Postgres icke-standardiserade UPDATE .. FROM klausul? Jag antar att det här skulle fungera

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

Observera att jag tvingar genid() anropas exakt en gång per post i mytable inom undervalet. Sedan går jag själv med i mytable och gen med ett hypotetiskt id kolumn. Se dokumentationen här:

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

Det här verkar dock bara ha introducerats med Postgres 9.0. Om det verkar för komplicerat (dvs inte särskilt läsbart) kan du fortfarande ta till pgplsql som användare Florin föreslås här .



  1. Hur man lagrar sekventiell data i mysql

  2. Spring Data returnerar List<Objekt[]>

  3. Hur kan jag återställa standard "root" användarbeteende på MySQL 5.7

  4. C# + MySQL förberett uttalande med problem med UPPDATERING AV DUBLIKATNYCKEL