首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法创建扩展postgis,$libdir/postgis-2.1未找到

无法创建扩展postgis,$libdir/postgis-2.1未找到
EN

Stack Overflow用户
提问于 2015-06-17 21:39:10
回答 2查看 5.1K关注 0票数 0

我在Debian上,安装了PostgreSQL 9.3。最近我安装了PostGIS2.1.7,还有脚本包(63个.sql文件,总计38,7MB)

代码语言:javascript
复制
apt-get install postgresql-9.3-postgis-2.1

根据天资,一切都安装得很好。然而,它似乎不起作用。安装之后,这就是我遇到的错误:

代码语言:javascript
复制
CREATE EXTENSION postgis;
ERROR:  could not open extension control file "/usr/local/pgsql-9.3.2/share/extension/postgis.control": File or directory not found

使用find,我发现它在另一个文件夹中:

代码语言:javascript
复制
root@server:/# find / -name postgis.control
/usr/share/postgresql/9.3/extension/postgis.control

我将文件复制到/usr/local/pgsql-9.3.2/share/扩展名。然后,错误更改为:

代码语言:javascript
复制
ERROR: could not access file "$libdir/postgis-2.1": No such file or directory

在这里,我似乎不能做任何事情来使它发挥作用。到目前为止,我尝试过的都没有成功:

1-编辑postgis.control并更改以下行。创建扩展始终给出与$libdir相同的错误

代码语言:javascript
复制
# module_pathname = '$libdir/postgis-2.1'
module_pathname = '/usr/local/pgsql-9.3.2/share/extension/'

2.完全卸载Postgis并重新安装它。什么都没变。

3-创建指向/usr/lib/postgresql/9.3/lib/postgis-2.1.so的符号链接。相同误差

4-创建一个名为libdir的环境变量,指向以下路径:

代码语言:javascript
复制
/usr/local/pgsql-9.3.2/share/extension/
/usr/share/postgresql/9.3/extension/
/usr/lib/postgresql/9.3/
/usr/lib/postgresql/9.3/lib

所有这些都不起作用,错误消息一直是“无法访问$libdir/postgis”。我想指出的是,在最后一个文件夹中,我还尝试创建一个名为postgis-2.1的新文件夹,并复制postgis-2.1.so,但没有效果。

我还有什么选择可以让后遗症发挥作用?我忽略了什么?

EDIT1:这是dpkg -S psql的结果

代码语言:javascript
复制
postgresql-client-9.3: /usr/share/locale/zh_TW/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/es/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/de/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/zh_CN/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/ru/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/lib/postgresql/9.3/bin/psql
postgresql-client-9.3: /usr/share/locale/pt_BR/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/postgresql/9.3/man/man1/psql.1.gz
postgresql-client-9.3: /usr/share/locale/pl/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/ja/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/fr/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/it/LC_MESSAGES/psql-9.3.mo
postgresql-client-9.3: /usr/share/locale/cs/LC_MESSAGES/psql-9.3.mo
bash-completion: /usr/share/bash-completion/completions/psql
postgresql-client-9.3: /usr/share/postgresql/9.3/psqlrc.sample
odbcinst1debian2:amd64: /usr/lib/x86_64-linux-gnu/odbc/libodbcpsqlS.so

EDIT2:由于某种原因,该行位于/home/postgres/..bashrc文件中。建立数据库的人至少在两年前离开了这份工作,所以我甚至不能问“为什么?”:

代码语言:javascript
复制
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH

移动postgis-2.1所以有了“工作”,但现在我又面临另一个问题。

代码语言:javascript
复制
create extension postgis;
ERROR:  could not load library "/usr/local/pgsql-9.3.2/lib/postgis-2.1.so": /usr/local/pgsql-9.3.2/lib/postgis-2.1.so: undefined symbol: HeapTupleHeaderGetDatum

我正在研究类似的问题,大多数问题似乎与postgresql为9.3.3或更低有关,postgis的版本设计为9.3.4或更高版本。通过源代码/脚本构建,我认为升级当前Postgres (9.3.2)并不是一个简单的apt-get升级。

我会继续寻找解决方案,但如果有人能想到什么,并想给我指点,我将非常感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-19 13:29:30

由于我使用的PostgreSQL版本在从源代码安装时有一些自定义行,所以它几乎不受小版本更新和扩展安装的影响。

我不得不停止服务,复制配置(postgresql.config和pg_hba.conf),卸载它并通过apt-get重新安装。

卸载

代码语言:javascript
复制
root@host:/home# wget http://ftp.postgresql.org/pub/source/v9.3.2/postgresql-9.3.2.tar.bz
root@host:/home# tar xfvz postgresql-9.3.2
root@host:/home# cd postgresql-9.3.2
root@host:/home/postgresql-9.3.2# ./configure -prefix=/usr/local/pgsql-9.3.2
root@host:/home/postgresql-9.3.2# make uninstall
root@host:/home/postgresql-9.3.2# apt-get install postgresql-9.3 postgresql-server-dev-9.3 postgresql-doc-9.3 postgresql-contrib-9.3 postgresql-client-9.3 postgresql-client-common postgresql-9.3-postgis-2.1

在此之后,一切运行顺利,新版本立即识别旧数据库和用户/角色。我还成功地执行了,而不必做任何其他事情。

票数 0
EN

Stack Overflow用户

发布于 2018-02-14 07:30:01

我也遇到了同样的问题,花了我两天的时间才解决。我手动创建一个新的PostGIS.control文件,并从plpgsql.control文件中复制内容并放到它上。然后它说我错过了postgis--1.0.sql。我也这样做了,手动创建了它,并将它保留为空。

在做这一切之前,我只运行了"CREATE EXTENSION postgis;"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30902876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档