2013-10-21 112 views
1

我在archlinux上安装了postgresql 9.3build postgis 2.0.0失败

我试图还原数据库备份(psql <db_hame> < backup.file),它采用了PostGIS 2.0功能,类型等我试图安装使用pacman(pacman -S postgis)PostGIS的它安装成功,但它似乎2.02.1版本不兼容,因为我有很多错误抱怨数据库导入过程中丢失功能:

ERROR: could not find function "geography_analyze" in file "/usr/lib/postgresql/postgis-2.1.so" 
ERROR: function public.geography_analyze(internal) does not exist 
ERROR: function geography_analyze(internal) does not exist 
ERROR: could not find function "geometry_analyze_2d" in file "/usr/lib/postgresql/postgis-2.1.so" 
ERROR: function public.geometry_analyze(internal) does not exist 
ERROR: function geometry_analyze(internal) does not exist 
ERROR: type "geometry" is only a shell 
ERROR: type "public.geometry_dump" does not exist 
ERROR: type "geometry" is only a shell 
ERROR: type "public.valid_detail" does not exist 
ERROR: SQL function cannot accept shell type geography 
ERROR: function public._st_bestsrid(geography) does not exist 
ERROR: PL/pgSQL functions cannot return type geometry 
ERROR: function public._st_concavehull(geometry) does not exist 
ERROR: type "geometry_dump" does not exist 
ERROR: function public._st_dumppoints(geometry, integer[]) does not exist 
ERROR: SQL function cannot accept shell type geometry 
ERROR: function public._st_within(geometry, geometry) does not exist 
ERROR: could not find function "geography_gist_selectivity" in file "/usr/lib/postgresql/postgis-2.1.so" 
ERROR: function public.geography_gist_join_selectivity(internal, oid, internal, smallint) does not exist 
ERROR: could not find function "geography_gist_selectivity" in file "/usr/lib/postgresql/postgis-2.1.so" 
ERROR: function public.geography_gist_selectivity(internal, oid, internal, integer) does not exist 
ERROR: could not find function "geometry_gist_joinsel_2d" in file "/usr/lib/postgresql/postgis-2.1.so" 
ERROR: function public.geometry_gist_joinsel_2d(internal, oid, internal, smallint) does not exist 
ERROR: could not find function "geometry_gist_sel_2d" in file "/usr/lib/postgresql/postgis-2.1.so" 
ERROR: function public.geometry_gist_sel_2d(internal, oid, internal, integer) does not exist 

然后我试图建立使用以下链接PostGIS的包:http://boringnerdystuff.wordpress.com/2012/04/14/postgis-2-0-pkgbuild-for-arch-linux/https://github.com/philbns/PostGIS-2.0-PKGBUILD/tree/80d8af061fa73e9a09dd6ec5c204bc4b65e38202。但是构建失败,以下错误:

lwgeom_triggers.c: In function ‘cache_bbox’: 
lwgeom_triggers.c:78:33: error: dereferencing pointer to incomplete type 
    tupdesc = trigdata->tg_relation->rd_att; 

和全makepkg日志:http://pastebin.com/GGqECymZ

我怎么能导入使用的PostGIS 2.0数据库?

回答

3

嗯,这是相当具有挑战性的得到它的工作。

我无法在postgres 9.3上创建postgis 2.0.0,所以我不得不回滚到postgres 9.1.10,并从源代码构建postgress和postgis。

我使用指令从http://boringnerdystuff.wordpress.com/2012/04/14/postgis-2-0-pkgbuild-for-arch-linux/(本身包在github上:https://github.com/philbns/PostGIS-2.0-PKGBUILD)构建postgis。

另一个问题是使用postgres软件包。我试过9.1.4,但是它失败了db初始化有一些错误。最后我发现9.1.10可以初始化db。没有用于postgres 9.1.10的包,所以我使用postgres 9.1.4的包(从https://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/postgresql&id=5bd2e474704f619449287efc7310acebcaf15ab4),然后将pkgver更改为9.1.10交叉的手指,并希望一切都可以。这工作!我建立了postgres然后postgis并且安装了它们。

我启用了PostGIS扩展在我的分贝:

CREATE EXTENSION postgis; 
CREATE EXTENSION postgis_topology; 
CREATE EXTENSION fuzzystrmatch; 

最后我的数据库备份没有任何错误进口。