OS X Mavericks にアップデートし、個人の OSM データ (JOSM ソフトウェアを使用して作成) を Tilemill マップに変換するワークフローを再度セットアップしようとしました。
このために、osm2pgsql を使用して、postgres/postgis データベースに OSM ファイルを追加します。更新前は、同じワークフローでうまくいきました。
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でバグ レポートを開きましたが、このフォーラムはあまり活発ではないため、そこからの助けは期待できません。
osm2pgsql コードで、delete_node 部分が osm2pgsql/middle-pgsql.c ファイルにあることがわかりました。
"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 );
心当たりのある方、大歓迎です!
ありがとう
グレッグ