2013-02-07 34 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);