sql >> Databáze >  >> RDS >> PostgreSQL

Aktualizace pomocí funkce volané jednou pro každý řádek v Postgres 8.4

Vyzkoušeli jste nestandardní UPDATE .. FROM Postgresu doložka? Myslím, že by to fungovalo

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

Všimněte si, že vynucuji genid() být volán přesně jednou na záznam v mytable v rámci podvýběru. Pak se sám připojuji k mytable a gen pomocí hypotetického id Dokumentaci naleznete zde:

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

Zdá se však, že to bylo zavedeno pouze s Postgres 9.0. Pokud se vám to zdá příliš komplikované (tj. nepříliš čitelné), stále se můžete uchýlit k pgplsql jako uživatel Florin navrhl zde .



  1. Write Skew anomálie v Oracle a PostgreSQL nevrací transakci

  2. SQLite SUM

  3. Proč Postgresql takto selhává s Geokitem?

  4. Problém s kódováním PHP/ODBC