0

「世界の国々」-postgis-tableを、開発サーバーからのシェープファイル(Postgisデータベースからダンプされた)の形式で提供される別のテーブルに置き換えることで、「更新」したいと思います。

テーブルがすでに存在するため、エラーがスローされるため、「pgsql2shp」を実行することはできません。また、既存のテーブルの名前を「xx_original」のような名前に変更しても機能しません(「xx_geom_gistはすでに存在します」の場合はエラーメッセージです)。

(古い)テーブルをバックアップとして保持したいので、直接削除したくありません。

それで、これを解決するための「正しい」方法は何ですか?ヒントをありがとう!

4

1 に答える 1

0

アップサート機能を探している場合、PostgreSQL 9.1 以降を使用している場合の明白なアプローチは、データを一時テーブルにコピーしてから、CTE を使用して更新することです。

例は次のとおりです。

 WITH upsert as (
     UPDATE my_countries set shape = (select shape from temp_countries t 
                                       where t.name = my_countries.name)
      WHERE name IN (select name from temp_countries)
    RETURNING *
 )
 INSERT INTO my_countries
 SELECT * FROM temp_countries
  WHERE name NOT IN (select name from upsert);
于 2013-04-24T06:12:49.430 に答える