Я обновился до 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 );
Если у вас есть идеи, пожалуйста!
Спасибо
Грег
PREPARE get_node_list( ...
отсутствует точка с запятой. Оператор next(=delete_node), вероятно, поглощается оператором get_copy (или блокируется и игнорируется синтаксическим анализатором) - person wildplasser   schedule 30.10.2013