“CREATE EXTENSION postgis”失败并显示“无法访问文件“$libdir/postgis-3””

“CREATE EXTENSION postgis”失败并显示“无法访问文件“$libdir/postgis-3””
# 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_64postgresql-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。

相关内容