构建postgis 2.0.0失败

时间:2013-10-21 00:43:29

标签: postgresql postgis archlinux

我在archlinux上安装了postgresql 9.3

我正在尝试恢复使用postgis 2.0函数,类型等的数据库备份(psql <db_hame> < backup.file)。我尝试使用pacman(pacman -S postgis)安装postgis,但是它成功安装了{{1} }}和2.0版本不兼容,因为我有很多错误抱怨数据库导入过程中缺少函数:

2.1

然后我尝试使用以下链接构建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。但是,构建失败并出现以下错误:

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

整个lwgeom_triggers.c: In function ‘cache_bbox’: lwgeom_triggers.c:78:33: error: dereferencing pointer to incomplete type tupdesc = trigdata->tg_relation->rd_att; 日志:http://pastebin.com/GGqECymZ

如何导入使用postgis 2.0的数据库?

1 个答案:

答案 0 :(得分:4)

嗯,要让它发挥作用是非常具有挑战性的。

我无法针对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/构建postgis(本身包在github上:https://github.com/philbns/PostGIS-2.0-PKGBUILD)。

另一个问题是postgres包。我尝试了9.1.4,但是数据库初始化失败并出现了一些错误。最后我发现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;

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