我想“更新”“世界各国”-postgis-table,将其替换为另一个来自我的开发服务器的shapefile形式(从Postgis数据库中转储)。
现在,我不能只做一个“pgsql2shp”,因为这会因为表已经存在而引发错误。并将现有表重命名为“xx_original”之类的东西也不起作用(“xx_geom_gist已经存在”,然后是错误消息)。
我不想直接删除(旧)表,因为我希望将其保留为备份。
那么,解决这个问题的“正确”方法是什么?谢谢你的任何提示!
答案 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);