【问题标题】:could not access file "$libdir/plpgsql" while creating template_postgis创建 template_postgis 时无法访问文件“$libdir/plpgsql”
【发布时间】:2016-02-26 16:20:37
【问题描述】:

我之前在我的 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 不是 libdir 下找到了plpgsql.so, 所以我在 libdir 下创建了一个名为 plpgsql.so 和另一个 plpgsql 的符号链接,但它仍然不起作用。

真正的问题是什么?我该如何解决这个问题?

我的 Mac 运行的是最新的 OS X 10.11,它们都由 homebrew 安装和升级。

更新: 受@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/中都有一个符号链接。

【问题讨论】:

    标签: postgresql postgis


    【解决方案1】:

    真是巧合:我刚遇到类似问题,正在寻找解决方案时发现了您的问题。

    几天前我还更新了我的 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 的更改版本号)

    【讨论】:

    • 我的状态是template_postgis数据库中只安装了plpgsql 1.0。如何为这个模板数据库安装 postgis 插件?
    • 我安装了这样的 PostGIS 扩展:psql --username=gisuser --dbname=gis -c "CREATE EXTENSION postgis;" psql --username=gisuser --dbname=gis -c "CREATE EXTENSION postgis_topology;" 这是我从安装 Postgresql /postgis 到导入 OSM 地图数据所做的:cervisial.wordpress.com/2015/11/26/…
    • 我无法在命令之间添加换行符。它的两个命令:第一:psql --username=gisuser --dbname=gis -c "CREATE EXTENSION postgis;" 第二:psql --username=gisuser --dbname=gis -c "CREATE EXTENSION postgis_topology;"
    • 与我提到的错误相同:ERROR: could not open extension control file "/usr/local/Cellar/postgresql/9.4.5/share/postgresql/extension/postgis.control": No such file or directory。我认为关键点可能是为什么没有正确安装 postgis.control?
    • 谢谢,您的回答让我找到了解决类似问题的正确方向。
    【解决方案2】:

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

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

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

    无论如何,谢谢你的帮助!

    【讨论】:

      【解决方案3】:

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

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

      which pg_config
      

      【讨论】:

      • 我确定我在/usr/local/Cellar/postgresql/9.4.5_2/中只安装了一个。
      猜你喜欢
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 2013-10-16
      相关资源
      最近更新 更多