osm2pgsql:函数AddGeometryColumn不存在

时间:2012-10-30 04:30:31

标签: postgresql postgis openstreetmap postgresql-9.2

我想使用工具OSM fileOsm2pgsql导入我的PostgreSQL数据库(Windows,Postgres版本9.2)。

当我运行以下命令时

osm2pgsql.exe --create -d mydb artyom.xml -U myuser -W --style default.style

我收到错误

SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
 failed: FEHLER:  Funktion addgeometrycolumn(unknown, unknown, integer, unknown,
 integer) existiert nicht
LINE 1: SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, ...
               ^
HINT:  Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen ├╝b
erein. Sie m├╝ssen m├Âglicherweise ausdr├╝ckliche Typumwandlungen hinzuf├╝gen.

Error occurred, cleaning up

德语翻译:

SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
 failed: ERROR:  Function addgeometrycolumn(unknown, unknown, integer, unknown,
 integer) doesn't exist
LINE 1: SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, ...
               ^
HINT: No function matches the specified name and argument types. Maybe you need
to make explicit casts.

Error occurred, cleaning up

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:23)

您似乎没有将PostGIS支持添加到您尝试使用osm2pgsql.exe的数据库。请参阅the PostGIS installation documentation (2.0)

由于您使用的是PostGIS 2.0,因此您应该只需CREATE EXTENSION postgis;即可加载PostGIS。此命令必须以超级用户身份运行 - 通常是用户postgres。使用:

psql -U postgres mydbname

以用户postgres进行连接。

似乎至少Windows osm2pgsql的版本不支持PostGIS 2.0 - 或者大约六个月前也没有。请参阅OSM GitHub上的this issue reportinstructions on how to set a PostGIS 2 database to be compatible with an osm2pgsql that expects PostGIS 1.x。未来的读者在继续之前应该检查这些步骤是否仍然是实际需要的; Windows osm2pgsql可能会在某些时候更新为支持PostGIS 2。

答案 1 :(得分:2)

相当晚,但我偶然发现并绊倒了这个9月16日。 SQL行:

SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );

需要重写为此函数签名:

('catalog','schema','table','column',srid,'type',type_mod,boolean);

白色空间并不重要。所以类似下面的内容应该可以解决问题:

SELECT AddGeometryColumn('','','planet_osm_point', 'way', 900913, 'POINT', 2,true );

检查其中一个实际的INSERT语句,以获取我的版本中的正确列名称' geom'。

确保引用varchars,不引用整数和布尔值,当然正确的值在这些位置。

祝你好运。