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

Postgresql 无法创建扩展postgis,未找到$libdir/postgis-2.1,postgresql,postgis,postgresql-9.3,Postgresql,Postgis,Postgresql 9.3,我正在使用Debian Wheezy,我已经安装了PostgreSQL 9.3。 最近,我安装了Postgis 2.1.7以及脚本包(63.sql文件,总容量为38.7MB) 根据能力,一切都安装得很好。然而,它似乎不起作用。安装后,这是我遇到的错误: CREATE EXTENSION postgis; ERROR: could not open extension control file "/usr/local/pgsql-9.3.2/share/extension/postgis.con

我正在使用Debian Wheezy,我已经安装了PostgreSQL 9.3。 最近,我安装了Postgis 2.1.7以及脚本包(63.sql文件,总容量为38.7MB)

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

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
使用“查找”,我发现它位于另一个文件夹中:

root@server:/# find / -name postgis.control
/usr/share/postgresql/9.3/extension/postgis.control
我将文件复制到/usr/local/pgsql-9.3.2/share/extension。然后错误更改为:

ERROR: could not access file "$libdir/postgis-2.1": No such file or directory
这就是我似乎不能做任何事情来让它工作的地方。我迄今为止所做的尝试都没有成功:

1-编辑postgis.control并更改以下行。CREATE EXTENSION不断给出关于$libdir的相同错误

# 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的环境变量,该变量指向以下路径:

/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复制到该文件夹中,但没有成功

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

EDIT1:这是dpkg-S psql的结果

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文件中。建立数据库的人至少两年前离职了,所以我甚至不能问“为什么?”:

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

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升级


我会继续寻找解决方案,但如果有人能想到什么并想告诉我,我将不胜感激。

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

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

卸载

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

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

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


在执行所有这些操作之前,我只运行了
“创建扩展postgis;”

一个为debian打包/配置的postgresql-9.3不会在/usr/local/pgsql-9.3.2中搜索扩展。您是否自行编译了postgres?postgresql是从哪里安装的?这是一个非常奇怪的配置。dpkg-S/usr/local/pgsql-9.3.2/bin/psql的输出是什么?一般来说,你不能将打包的扩展(如PostGIS)与自编的PostgreSQL混合使用。在编辑栏中发布了结果。我和同事们一起询问,发现postgres是用脚本安装的。
makeinstall
前面的一些行是这样的:
#mkdir/usr/local/pgsql-9.3.2(versão)
<代码>#chown postgres/usr/local/pgsql-9.3.2/<代码>$./configure--prefix=/usr/local/pgsql-9.3.2/
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
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