如何更新(替换)Postgis表?

时间:2013-02-07 07:56:58

标签: postgresql postgis shapefile

我想“更新”“世界各国”-postgis-table,将其替换为另一个来自我的开发服务器的shapefile形式(从Postgis数据库中转储)。

现在,我不能只做一个“pgsql2shp”,因为这会因为表已经存在而引发错误。并将现有表重命名为“xx_original”之类的东西也不起作用(“xx_geom_gist已经存在”,然后是错误消息)。

我不想直接删除(旧)表,因为我希望将其保留为备份。

那么,解决这个问题的“正确”方法是什么?谢谢你的任何提示!

1 个答案:

答案 0 :(得分: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);