创建 template_postgis 时无法访问文件“$libdir/plpgsql”
could not access file "$libdir/plpgsql" while creating template_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/lib
,pg_config --pkglibdir
returns /usr/local/lib/postgresql
。
而且我发现pkglibdir下的plpgsql.so
不是libdir,
所以我在 libdir 下创建了一个名为 plpgsql.so 的符号 link 和另一个 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/
.
中都有一个符号link
巧合:我遇到了类似的问题,正在寻找解决方案时发现了您的问题。
我也在几天前更新了我的 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
的更改版本号)
可能您已经在 Mac.
上安装了 多个 Postgres 实例
当您执行 pg_config --pkglibdir
时,确保它是与您的安装相关联的那个。 运行:
which pg_config
最后,我弄清楚了导致这个问题的原因:虽然我的Mac上只安装了一个postgres,但是有两个个postgres退出!
真正发生的是我在没有关闭的情况下升级了postgres程序,brew也没有,所以我在本地安装了一个postgres 9.4。5_2并且内存中有一个旧的!
所以解决方案非常简单:关闭旧的并启动新安装的 postgres!
无论如何,感谢您的帮助!
我已经在我的 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
returns /usr/local/lib/postgresql
。
而且我发现pkglibdir下的plpgsql.so
不是libdir,
所以我在 libdir 下创建了一个名为 plpgsql.so 的符号 link 和另一个 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/
.
巧合:我遇到了类似的问题,正在寻找解决方案时发现了您的问题。
我也在几天前更新了我的 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
的更改版本号)
可能您已经在 Mac.
上安装了 多个 Postgres 实例当您执行 pg_config --pkglibdir
时,确保它是与您的安装相关联的那个。 运行:
which pg_config
最后,我弄清楚了导致这个问题的原因:虽然我的Mac上只安装了一个postgres,但是有两个个postgres退出!
真正发生的是我在没有关闭的情况下升级了postgres程序,brew也没有,所以我在本地安装了一个postgres 9.4。5_2并且内存中有一个旧的!
所以解决方案非常简单:关闭旧的并启动新安装的 postgres!
无论如何,感谢您的帮助!