2013-02-07 72 views
0

我想從我的開發服務器中更新「更新」一個「世界各國」-postgis-table,將其替換爲另一個以shapefile形式出現的文件(從Postgis數據庫轉儲)。如何更新(替換)Postgis表?

現在,我不能只是做一個「pgsql2shp」,因爲這會引發錯誤,因爲表已經存在。並且將現有表重命名爲「xx_original」之類的內容也不起作用(「xx_geom_gist已存在」,然後是錯誤消息)。

我不想直接刪除(舊)表,因爲我想保留它作爲備份。

那麼,解決這個問題的「正確」方法是什麼?感謝任何提示!

+0

如果你被* xx_geom_gist已經存在*」,然後選擇一個不同的名稱顯然,這表已被‘備份’已經 –

+0

謝謝,但我需要調用它。與我網站上的整個代碼使用名爲「xx」的表相同的名稱。 – luftikus143

回答

0

如果你正在尋找一個upsert功能,如果你使用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);