我在Debian Wheezy,我安装了PostgreSQL 9.3。 最近我安装了Postgis 2.1.7,脚本包也是如此(63个.sql文件总共38,7 MB)
apt-get install postgresql-9.3-postgis-2.1
根据能力,一切都安装得很好。但是,它似乎不起作用。安装后,这是我得到的错误:
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,我发现它在另一个文件夹中:
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文件中。建立数据库的人至少在2年前就离职了,所以我甚至不能问“为什么?”:
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
移动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升级。
我会一直在寻找解决方案,但如果有人能想到什么并且想指出我,我将不胜感激。
答案 0 :(得分:0)
由于我使用的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 而无需做任何其他事情。
答案 1 :(得分:0)
我遇到了同样的问题,我花了两天时间来解决它。 我手动创建一个新的PostGIS.control文件,并复制plpgsql.control文件中的内容并将其放在上面。 然后它说我错过了postgis - 1.0.sql。 我做了同样的事情,并手动创建并将其留空。
在完成所有这些之前,我只需运行"CREATE EXTENSION postgis;"