我已经在我的Mac上安装了PostgreSQL和Postgis,之前是9.3和2.1但从未使用过。 将pg升级到4.5_2并将postgis升级到2.2(最新版本)之后,我尝试构建我的第一个基于postgis的应用程序并创建如下的template_postgis:
createdb template_postgis
psql -d template_postgis -f /usr/local/share/postgis/postgis.sql
得到了这个错误:
SET
BEGIN
psql:/usr/local/share/postgis/postgis.sql:77: ERROR: could not access file "$libdir/plpgsql": No such file or directory
...
所以我运行pg_config --libdir
它说/usr/local/lib
,pg_config --pkglibdir
返回/usr/local/lib/postgresql
。
我发现pkglibdir下的plpgsql.so
不是libdir,
所以我创建了一个名为plpgsql.so的符号链接和libdir下的另一个plpgsql,但它仍然不起作用。
那里到底出了什么问题?我该如何解决这个问题?
我的Mac正在运行最新的OS X 10.11,它们都是由自制软件安装和升级的。
更新:
受@Stefan D.的启发,我运行psql -c "\dx"
列出所有已安装的扩展结果:
Name | Version | Schema | Description
---------+---------+------------+---------------------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 2.1.7 | public | PostGIS geometry, geography, and raster spatial types and functions
所以我运行ALTER EXTENSION postgis UPDATE TO "2.2.0";
手动更新postgis的版本,但又出现了另一个错误:could not open extension control file "/usr/local/Cellar/postgresql/9.4.5/share/postgresql/extension/postgis.control": No such file or directory
。
我的PostgreSQL安装在/usr/local/Cellar/postgresql/9.4.5_2/
中,这是有线的。并且postgis.control
中未列出/usr/local/Cellar/postgresql/9.4.5_2/share/postgresql/extension/
。
找到后,我发现所有.control
个文件都在/usr/local/share/postgresql/extension/
中有符号链接。
答案 0 :(得分:6)
多么巧合:我遇到了类似的问题,并在找到问题时正在寻找解决方案。
我几天前也更新了我的postgresql / postgis安装,当我想使用我的数据库(我在更新之前创建)时,今天我得到了一个与你类似的错误(对我来说就是无法找到postgis 2.1库)
同时我可以解决它。我是这样做的:
我的问题是:数据库是使用旧的Postgresql / postgis版本设置的。它仍然在寻找旧图书馆。您可以使用以下命令列出所有扩展名来检查:
psql --username=gisuser --dbname=gis -c "\dx"
对我来说,这给了我这个输出:
List of installed extensions
Name | Version | Schema | Description
------------------+---------+------------+---------------------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 2.1.7 | public | PostGIS geometry, geography, and raster spatial types and functions
postgis_topology | 2.1.7 | topology | PostGIS topology spatial types and functions
(3 rows)
正如您所看到的postgis
和postgis_topology
扩展程序版本(2.1.7
)不适合我安装的版本(2.2.0
)
为了解决这个问题,我执行了以下命令来更新扩展版本:
psql --username=gisuser --dbname=gis -c "ALTER EXTENSION postgis UPDATE;"
psql --username=gisuser --dbname=gis -c "ALTER EXTENSION postgis_topology UPDATE;"
您可能需要稍微改变命令(用户名,数据库和要更新的扩展名)
检查它是否再次起作用: psql --username = gisuser --dbname = gis -c“\ dx”
现在输出是:
List of installed extensions
Name | Version | Schema | Description
------------------+---------+------------+---------------------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgis | 2.2.0 | public | PostGIS geometry, geography, and raster spatial types and functions
postgis_topology | 2.2.0 | topology | PostGIS topology spatial types and functions
(3 rows)
(请注意postgis
和postgis_topology
)
答案 1 :(得分:3)
最后,我找到了导致此问题的原因:虽然我的Mac上只安装了一个postgres,但有 TWO postgres退出!
真正发生的事情是我在没有关闭的情况下升级了postgres程序,而且没有brew,所以我在本地安装了一个postgres 9.4.5_2,并且在内存中安装了一个旧版本!
所以解决方案非常简单:关闭旧解决方案并启动新安装的postgres!
无论如何,谢谢你的帮助!
答案 2 :(得分:1)
您可能已在Mac上安装了Postgres的多重实例。
执行pg_config --pkglibdir
时,请确保它与您的安装相关联。运行:
which pg_config