我更新到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