Postgresql 无法访问文件"$libdir/plpgsql";在创建模板时

Postgresql 无法访问文件"$libdir/plpgsql";在创建模板时,postgresql,postgis,Postgresql,Postgis,我以前在我的Mac电脑上安装过PostgreSQL和Postgis,当时是9.3和2.1版本,但从未使用过。 在将pg升级到4.5_2并将postgis升级到2.2(现在最新版本)之后,我尝试构建我的第一个基于postgis的应用程序,并创建模板_postgis,如下所示: createdb template_postgis psql -d template_postgis -f /usr/local/share/postgis/postgis.sql 得到了这个错误: SET BEGIN p

我以前在我的Mac电脑上安装过PostgreSQL和Postgis,当时是9.3和2.1版本,但从未使用过。 在将pg升级到4.5_2并将postgis升级到2.2(现在最新版本)之后,我尝试构建我的第一个基于postgis的应用程序,并创建模板_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, 所以我在libdir下创建了一个名为plpgsql.so的符号链接和另一个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
所以我运行
alterextensionpostgis更新到“2.2.0”
手动更新postgis版本,但出现另一个错误:
无法打开扩展控制文件/usr/local/ceral/postgresql/9.4.5/share/postgresql/extension/postgis.control”:没有这样的文件或目录

这是因为我的PostgreSQL安装在
/usr/local/ceral/PostgreSQL/9.4.5_2/
中。和
postgis.control
也未列在
/usr/local/ceral/postgresql/9.4.5_2/share/postgresql/extension/


定位后,我发现所有
.control
文件在
/usr/local/share/postgresql/extension/
中都有一个符号链接。这是一个多么复杂的问题啊:我刚刚遇到了一个类似的问题,当我找到你的问题时正在寻找解决方案

几天前,我还更新了我的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\u拓扑
扩展版本(
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\u拓扑
的版本号已更改)

您可能已在Mac上安装了Postgres的多个实例

当您执行pg_config--pkglibdir时,请确保它是与您的安装相关联的。运行:

which pg_config

最后,我找出了这个问题的原因:虽然我的Mac上只安装了一个postgres,但是有两个postgres退出

真正发生的事情是我升级了postgres程序而没有关闭,brew也没有,所以我在本地安装了一个postgres 9.4.5_2,在内存中安装了一个旧的

所以解决方案非常简单:关闭旧的,启动新安装的postgres


无论如何,谢谢你的帮助

我确信我在
/usr/local/ceral/postgresql/9.4.5_2/
中只安装了一个。我的状态是
模板_postgis
数据库中只安装了plpgsql 1.0。如何为该模板数据库安装postgis插件?我安装了postgis扩展,如下所示:
psql--username=gisuser--dbname=gis-c“创建扩展postgis;”
psql--username=gisuser--dbname=gis-c“创建扩展postgis\u拓扑;”
以下是我从安装Postgresql/postgis到导入OSM地图数据所做的工作:我无法在命令之间添加换行符。它的两个命令:第一个:
psql--username=gisuser--dbname=gis-c“创建扩展postgis;”
第二个:
psql--username=gisuser--dbname=gis-c“创建扩展postgis_拓扑;”
与我提到的错误相同:
错误:无法打开扩展控制文件“/usr/local/Cellar/postgresql/9.4.5/share/postgresql/extension/postgis.control”:没有这样的文件或目录
。我想关键点可能是为什么postgis.control安装不正确?谢谢,您的回答为我找到了解决类似问题的正确方向。