我更新到OS X Mavericks,并尝试再次设置一个工作流程,将个人OSM数据(使用JOSM软件创建)转换为Tilemill地图。osm2pgsql的delete_node失败
为此,我使用osm2pgsql用我的OSM文件填充postgres/postgis数据库。更新之前,相同的工作流程运行良好。
我用Postgresql.app版本9.3.0.0和osm2pgsql版本0.84.0
当我启动osm2pgsql命令,我得到这个错误:
osm2pgsql SVN version 0.84.0 (64bit id space)
Using projection SRS 900913 (Spherical Mercator)
Setting up table: coast_point
...
Reading in file: ../src/misc/00_Coast.osm
delete_node failed: ERROR: prepared statement "delete_node" does not exist
(7)
Arguments were: -476852,
Error occurred, cleaning up
所以,有一个 “delete_node”错误,我真的不知道为什么。 我试图将负面的'id'值更改为正值,但我有同样的错误。
这里是OSM文件的第一行导致该错误:在以前工作过的所有文件
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' upload='true' generator='JOSM'>
<node id='-476852' action='modify' visible='true' lat='-4.660264310091712' lon='11.79785544887142' />
<node id='-476850' action='modify' visible='true' lat='-4.659760277426281' lon='11.78306037634432' />
...
同样的错误。
我打开了一个关于osm2pgsql github的错误报告,但这个论坛并不是非常活跃,所以我不期望有任何帮助。
"PREPARE get_node (" POSTGRES_OSMID_TYPE ") AS SELECT lat,lon,tags FROM %p_nodes WHERE id = $1 LIMIT 1;\n"
"PREPARE get_node_list(" POSTGRES_OSMID_TYPE "[]) AS SELECT id, lat, lon FROM %p_nodes WHERE id = ANY($1::" POSTGRES_OSMID_TYPE "[])",
"PREPARE delete_node (" POSTGRES_OSMID_TYPE ") AS DELETE FROM %p_nodes WHERE id = $1;\n",
.copy = "COPY %p_nodes FROM STDIN;\n",
.analyze = "ANALYZE %p_nodes;\n",
.stop = "COMMIT;\n"
(...)
pgsql_execPrepared(node_table->sql_conn, "delete_node", 1, paramValues, PGRES_COMMAND_OK);
如果您有什么想法,你太客气:
我在osm2pgsql代码的delete_node部分是osm2pgsql /中pgsql.c文件中找到!
感谢
格雷格
注:似乎到'PREPARE get_node_list后一个分号失踪(...'语句中的下一个(= delete_node)语句可能吸收到get_copy。语句(或解析器扼杀和忽略) – wildplasser
感谢wildplasser,你是对的,这很奇怪。似乎在[此代码]中有类似的其他错误(https://github.com/openstreetmap/osm2pgsql/blob /master/middle-pgsql.c),我不明白为什么没人发现那些丢失的分号。我下载了代码,我将它编译并告诉你这是否是问题。再次感谢您的评论 – iero
如果读取以前版本的代码,则看起来get_node_list()行最近已添加到代码中。看来,关于[此代码](https://github.com/openstreetmap/osm2pgsql/blob/master/middle-pgsql.c)的其余部分(即第101至第106行),在末尾的半角字符第88行需要删除。我不知道C编程足以回答这个问题。你怎么看? (注意,我更新了github上的bug报告) – iero