![“CREATE EXTENSION postgis”失败并显示“无法访问文件“$libdir/postgis-3””](https://linux22.com/image/212152/%E2%80%9CCREATE%20EXTENSION%20postgis%E2%80%9D%E5%A4%B1%E8%B4%A5%E5%B9%B6%E6%98%BE%E7%A4%BA%E2%80%9C%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E6%96%87%E4%BB%B6%E2%80%9C%24libdir%2Fpostgis-3%E2%80%9D%E2%80%9D.png)
# dnf list installed | grep postgresql
VRTSnbpostgresqlagent.x86_64 9.1.0.0-1620848511 @System
postgresql.x86_64 10.17-2.module+el8.5.0+11838+8dca950a @rhel8-appstream
postgresql-server.x86_64 10.17-2.module+el8.5.0+11838+8dca950a @rhel8-appstream
postgresql10.x86_64 10.22-1PGDG.rhel8 @rhel8-pgdg10
postgresql10-contrib.x86_64 10.22-1PGDG.rhel8 @rhel8-pgdg10
postgresql10-libs.x86_64 10.22-1PGDG.rhel8 @rhel8-pgdg10
postgresql10-server.x86_64 10.22-1PGDG.rhel8 @rhel8-pgdg10
# dnf list installed | grep postgis
postgis31_10.x86_64 3.1.7-1.rhel8 @rhel8-pgdg10
postgis31_10-client.x86_64 3.1.7-1.rhel8 @rhel8-pgdg10
postgis31_10-devel.x86_64 3.1.7-1.rhel8 @@commandline
postgis31_10-utils.x86_64 3.1.7-1.rhel8 @@commandline
(我的同事从...某处手动下载了后两个软件包)
当我们尝试时,CREATE EXTENSION postgis;
我们收到以下错误
ERROR: could not access file "$libdir/postgis-3": No such file or directory
我们的 PostgreSQL 安装位置中/usr/pgsql-10/
和内部/usr/pgsql-10/lib
是.so
扩展名的文件(例如postgis-3.so
)。里面/usr/pgsql-10/share/extension
是 postgis*.control 文件,其中包含:
# postgis extension
comment = 'PostGIS geometry and geography spatial types and functions'
default_version = '3.1.7'
module_pathname = '$libdir/postgis-3'
relocatable = false
当我尝试libdir=/usr/pgsql-10/lib
向文件添加一行时,出现错误,ERROR: unrecognized parameter "libdir" in file "/usr/share/pgsql/extension/postgis.control"
但是当我们将路径替换module_pathname
为包含时/usr/pgsql-10/lib
,我们得到了与之前相同的错误ERROR: could not access file "$libdir/postgis-3": No such file or directory
。还尝试安装其他非 PostGIS 扩展并遇到类似的could not access "$libdir/extension"
错误。
该服务器由我们的 IT 人员管理,他们帮助安装了一些 postgis 软件包,因此我不确定这里是否存在软件包宇宙不匹配的情况。
阅读后的一些进一步的背景这个答案,由于空间原因,PostgreSQL 数据目录安装在不同的位置 ( /pgdata
),所以也许在配置更改中遗漏了某些内容?
答案1
我遇到了类似的问题,结果发现我postgresql
同时安装了两个不同的版本。从你所展示的内容来看,我认为你应该删除postgresql.x86_64
和postgresql-server.x86_64
。您可以使用 删除它们dnf remove
。
dnf reinstall
请注意,删除不兼容的软件包后,您可能需要重新安装正确的软件包
答案2
版本包含子字符串的软件包PGDG
来自上游 postgres rpm 存储库:
https://www.postgresql.org/download/linux/redhat/
看起来 RHEL 自己的存储库作为模块提供的并行安装的 postgres 服务器正在干扰上游版本。
或者,您正在意外访问 rhel postgres 服务器和/或命令。这是有道理的,因为 postgis 软件包仅为上游版本安装。
postgres 上游 rpm 存储库说明甚至包括:
sudo dnf -qy module disable postgresql
当然,如果您想依赖 rhel 对 postgres 的支持,您应该坚持使用 rhel 提供的 postgres 软件包并使用它们而不是上游软件包(即迁移数据库数据并卸载上游软件包)。
不过,我不确定 rhel 是否甚至打包了 postgis。