0

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

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

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

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

4

1 回答 1

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);
于 2013-04-24T06:12:49.430 回答