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