首页 > 解决方案 > Osmosis 抛出奇怪的 Java 错误

问题描述

一段时间以来,我一直在尝试将 north-america-latest.osm.pbf(来自 Geofabrik)导入 Postgres 数据库。在彻底查看了 wiki 详细使用页面后,我通过包含的 sql 脚本将数据库设置为包含所有必要的表(pgSnapshot)。我还通过运行一个较小的文件(南极洲)来确保渗透按预期运行,并且得到了我预期的结果。但是,当我尝试对北美文件执行相同的过程时,我收到一个与网络上报告的其他错误不同的错误。我正在尝试将这些数据放到服务器上,上传到我的本地似乎没问题。

这是我的代码(通过命令提示符):

C:\Users\eddie\Desktop>osmosis --read-pbf-fast north-america-latest.osm.pbf --log-progress interval=3000 --write-pgsql nodeLocationStoreType="TempFile" host=1*.8*.*.*0* database=osm postgresSchema=osm_updates user=eddie password=***

这是我收到的错误消息:

SEVERE: Thread for task 1-read-pbf-fast failed
org.springframework.dao.EmptyResultDataAccessException: Incorrect result 
size: expected 1, actual 0
at org.springframework.dao.support.DataAccessUtils.requiredSingleResult(DataAccessUtils.java:71)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:495)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:500)
at org.openstreetmap.osmosis.pgsnapshot.common.SchemaVersionValidator.validateDBVersion(SchemaVersionValidator.java:64)
at org.openstreetmap.osmosis.pgsnapshot.common.SchemaVersionValidator.validateVersion(SchemaVersionValidator.java:47)
at org.openstreetmap.osmosis.pgsnapshot.v0_6.impl.CopyFilesetLoader.run(CopyFilesetLoader.java:77)
at org.openstreetmap.osmosis.pgsnapshot.v0_6.PostgreSqlCopyWriter.complete(PostgreSqlCopyWriter.java:117)
at org.openstreetmap.osmosis.core.progress.v0_6.EntityProgressLogger.complete(EntityProgressLogger.java:82)
at org.openstreetmap.osmosis.pbf2.v0_6.PbfReader.run(PbfReader.java:96)
at java.lang.Thread.run(Unknown Source)

Jul 19, 2018 8:28:24 AM org.openstreetmap.osmosis.core.Osmosis main 
SEVERE: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: One or more tasks failed.
at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.waitForCompletion(Pipeline.java:146)
at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:92)
at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:330)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:238)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at org.codehaus.classworlds.Launcher.main(Launcher.java:47)

我在具有 12GB RAM 和 2 个 Intel 2.4GHz 处理器的 Windows 10 上运行 osmosis .46、Postgres/PostGis 10/2.4。

更新:即使我运行较小的文件,现在也会发生错误。此外,从进度记录器消息中可以看出,渗透的行为就好像它正在处理一个更大的文件(到达南极洲的节点 4614331685)。将加拿大的 OSM 数据上传到我的本地没有任何问题,因此问题可能与我尝试连接的服务器有关。如果有人对如何破译错误信息有任何线索,我想听听他们的意见!

标签: postgresqlgisopenstreetmaposmosis

解决方案


通过接受@mmd 关闭模式验证的建议,我得到了渗透工作。尽管我之前运行了 pgsnapshot 脚本并成功地将数据放在那里,但在整个北美地区做一些事情似乎把它扔掉了。我将在后续数据库更新后更新此答案。


推荐阅读