我在Debian上,安装了PostgreSQL 9.3。最近我安装了PostGIS2.1.7,还有脚本包(63个.sql文件,总计38,7MB)
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/扩展名。然后,错误更改为:
ERROR: could not access file "$libdir/postgis-2.1": No such file or directory在这里,我似乎不能做任何事情来使它发挥作用。到目前为止,我尝试过的都没有成功:
1-编辑postgis.control并更改以下行。创建扩展始终给出与$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,但没有效果。
我还有什么选择可以让后遗症发挥作用?我忽略了什么?
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.soEDIT2:由于某种原因,该行位于/home/postgres/..bashrc文件中。建立数据库的人至少在两年前离开了这份工作,所以我甚至不能问“为什么?”:
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升级。
我会继续寻找解决方案,但如果有人能想到什么,并想给我指点,我将非常感激。
发布于 2015-06-19 13:29:30
由于我使用的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在此之后,一切运行顺利,新版本立即识别旧数据库和用户/角色。我还成功地执行了,而不必做任何其他事情。
发布于 2018-02-14 07:30:01
我也遇到了同样的问题,花了我两天的时间才解决。我手动创建一个新的PostGIS.control文件,并从plpgsql.control文件中复制内容并放到它上。然后它说我错过了postgis--1.0.sql。我也这样做了,手动创建了它,并将它保留为空。
在做这一切之前,我只运行了"CREATE EXTENSION postgis;"
https://stackoverflow.com/questions/30902876
复制相似问题