Postgresql 无法访问文件"$libdir/plpgsql";在创建模板时
我以前在我的Mac电脑上安装过PostgreSQL和Postgis,当时是9.3和2.1版本,但从未使用过。 在将pg升级到4.5_2并将postgis升级到2.2(现在最新版本)之后,我尝试构建我的第一个基于postgis的应用程序,并创建模板_postgis,如下所示: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
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安装不正确?谢谢,您的回答为我找到了解决类似问题的正确方向。