Answers:
我为您做了一个测试:
Ogr2ogr命令:
ogr2ogr -f PostgreSQL PG:“ dbname ='数据库名称'host ='addr'端口='5432'用户='x'密码='y'” test.shp --config PG_USE_COPY是-nlt MULTIPOLYGON
总时间:1分钟30秒
经过user30184的建议,Paul Ramsey和我自己的实验。我决定回答这个问题。
我没有在这个问题中提到我正在将数据导入到远程服务器。(尽管在我引用的博客文章中对此进行了描述)。互联网上的插入等操作会受到网络延迟的影响。提到该服务器位于Amazon RDS上可能并不无关紧要,这可以防止我SSH连接到计算机并在本地运行操作。
考虑到这一点,我重新设计了方法,使用“ \ copy”指令将数据转储到新表中。我认为该策略是必不可少的关键,对此问题的评论/答案也提到了这一策略。
psql database -U user -h host.eu-west-1.rds.amazonaws.com -c "\copy newt_table from 'data.csv' with DELIMITER ','"
此操作非常快。自从导入csv以来,我便完成了填充几何体,添加空间索引等所有工作。由于我当时正在服务器上运行查询,因此它仍然非常快。
我决定也参考user30184的建议,Paul Ramsey。我的数据文件是一个点shapefile,具有3035369条记录和82 MB。
ogr2ogr方法(使用PG_USE_COPY指令)在1:03:00 m结束,仍然比以前好得多。
shp2pgsql方法(使用-D指令)仅在00:01:04 m内完成。
值得一提的是,ogr2ogr在操作期间创建了空间索引,而shp2pgsql却没有。我发现,在执行导入后创建索引要比用这种类型的请求膨胀导入操作要高效得多。
结论是:正确设置参数后,shp2pgsql 非常适合执行大型导入,即要在Amazon Web Services中容纳的导入。
您可以在这篇文章的更新中阅读这些结论的更详细的描述。