创建template_postgis时无法访问文件“$ libdir / plpgsql”

时间:2015-11-24 09:37:53

标签: postgresql postgis

我已经在我的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/libpg_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/中有符号链接。

3 个答案:

答案 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)

正如您所看到的postgispostgis_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)

(请注意postgispostgis_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