2012-10-30 26 views
14

我想使用工具Osm2pgsqlOSM file导入我的PostgreSQL数据库(Windows,Postgres版本9.2)。osm2pgsql:函数AddGeometryColumn不存在

当我运行以下命令

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 

我怎样才能解决这个问题?

+0

您是否将PostGIS安装到此数据库中? –

+0

在菜单“开始”中有一个PostGIS文件夹。我是否需要为特定数据库显式安装PostGIS? –

回答

20

看起来你还没有添加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。

+0

当我运行' “C:\ Program Files文件\后 greSQL \ 9.2 \ BIN \ PSQL”,在命令行窗口-d中共网络-f postgis.sql --username = CCP-网络user',我得到很多错误,比如'psql:postgis.sql:6054:错误:当前事务已被取消,其余命令将被忽略。我该如何解决它们? –

+0

@DmitriPisarenko你有一个'template_postgis'数据库吗?改为使用该模板创建数据库。如果你不想这样做,很难从错误中指出错误。您需要查看* first *错误。尝试使用附加参数'-v ON_ERROR_STOP = 1'运行psql命令。 –

+0

我已经从模板'template_postgis_20'创建了一个数据库。当我使用'-v ON_ERROR_STOP = 1'运行命令时,出现错误'psql:C:/ Program Files/PostgreSQL/9.2/share/contrib/postgis-2.0/postgis.sql:47:错误:没有语言权限C'。我想是此命令失败:'CREATE OR REPLACE FUNCTION spheroid_in(为c_string) \t RETURNS球状体 \t AS '$ LIBDIR/PostGIS的-2.0', 'ellipsoid_in' \t LANGUAGE 'C' IMMUTABLE严格;' –

1

起步比较晚,但我迷迷糊糊地绊倒在这个九月'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); 

检查正确的列名这在我的版本是“GEOM”实际INSERT语句之一。

确保VARCHAR处理被引用,整数和布尔是带引号的,当然,正确的价值观都在地方。

祝你好运。