← 返回首页

在linux上安装PG客户端

服务器运维 亲身经历 公开
内容简要
在OpenCloudOS 9.4上安装PostgreSQL客户端时遇到版本不匹配、依赖冲突和GPG Key校验失败等问题。
坑点
版本不匹配、依赖冲突和GPG Key校验失败。
注意事项

1. 确保安装的pg_dump版本与PostgreSQL服务端版本兼容。

  • 使用系统自带版本,避免使用更新的版本。

2. 对于非官方支持的系统(如OpenCloudOS),手动创建repo文件指定PG源。

  • 创建 /etc/yum.repos.d/pgdg.repo 文件。

3. 解决GPG Key校验问题,可能需要更换Key地址或使用 --nogpgcheck 绕过。

  • 尝试不同的Key地址导入。
  • 使用 --nogpgcheck 强制安装。

4. 使用绝对路径指定pg_dump位置,避免版本冲突。

  • 使用 /usr/pgsql-17/bin/pg_dump 而不是 /usr/bin/pg_dump。

今天有一个需求,因为我的云端linux服务器的PG是安装在docker中的,但是在日常使用时我们想先进入docker再去执行PG命令操作,因此我想在我的linux系统中安装一个PG客户端,因为服务端已有安装了,因此不需要在linux中再重新安装服务端了。

1、查看linux的版本

===================================

[oadba@VM-0-7-opencloudos springboot]$ cat /etc/os-release

NAME="OpenCloudOS"

VERSION="9.4"

看内核

[oadba@VM-0-7-opencloudos springboot]$ uname -r

6.6.117-45.oc9.x86_64


OpenCloudOS 9.4

属于 RHEL 9 / CentOS Stream 9 兼容系(国产开源服务器发行版,腾讯等牵头)

包管理器:dnf(yum 兼容),不是 apt

内核:OC9 默认 5.14 系,你这台实际可能是 6.x 云内核

确定了linux版本后就可以使用相应的命令进行安装客户端了

OpenCloudOS 9 里 PostgreSQL 客户端包一般叫:

sudo dnf install -y postgresql

或显式一点:

sudo dnf install -y postgresql-client

image.png

装完验证:

which pg_dump
pg_dump --version

sudo dnf install -y postgresql 只就安装系统linux自带的版本,如果我们想装更新的版本可以使用PG官方源来下载和安装,不过最好还是使用系统自带,这样应隐定一点,确定是可用的。

现在出现一个问题,我使用15版本的pg_dump去备份docker中17版本时出现异常,原因在于低版本的客户端不能备份高版本的PG

[oadba@VM-0-7-opencloudos springboot]$ pg_dump -h 127.0.0.1 -p 5432 -U chen -d aikb -Fc -f /data/pitlog/backups/aikb.dump
Password: 
pg_dump: error: aborting because of server version mismatch
pg_dump: detail: server version: 17.11 (Debian 17.11-1.pgdg12+2); pg_dump version: 15.19

我现在想办法在服务器上安装17版本的,现在想办法安装17的版本,在安装时碰到第一个问题,因为linux版本并不是官方认定的版本出现以下问题。

[root@VM-0-7-opencloudos ~]# sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Last metadata expiration check: 2:41:36 ago on Thu 15 Oct 2026 10:51:14 AM CST.
pgdg-redhat-repo-latest.noarch.rpm                                                                                              10 kB/s |  15 kB     00:01    
Error: 
 Problem: conflicting requests
  • nothing provides /etc/redhat-release needed by pgdg-redhat-repo-42.0-70.rhel9PGDG.noarch from @commandline

(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

这个是 OpenCloudOS 不是“正宗 RHEL/CentOS”,PGDG 官方 RPM 里写死了依赖,我只能直接写repo源来指定PG来更新。

PG17 客户端安装踩坑总结(OpenCloudOS 9.4)


背景

  • 宿主机:OpenCloudOS 9.4(RHEL9 兼容系,国产发行版)
  • PostgreSQL 跑在 Docker 里,版本 17.11
  • 目标:在宿主机装 pg_dump 17,用来备份 Docker 里的 PG17

踩坑全过程

坑 1:默认装的是 PG15,版本太低备不了 17

dnf install postgresql   # 装的是 15
pg_dump -h 127.0.0.1 -p 5432 -U chen -d aikb -Fc -f backup.dump
# 报错:aborting because of server version mismatch
# server: 17.11, pg_dump: 15.19
规则:pg_dump 大版本必须 ≥ 服务端大版本,否则直接拒绝工作。

坑 2:PGDG 官方 RPM 依赖 /etc/redhat-release,OpenCloudOS 没有

dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 报错:nothing provides /etc/redhat-release
OpenCloudOS 提供的是 opencloudos-release,不是 redhat-release,PGDG 的 RPM 硬性依赖它,直接拒绝安装。

解决:不用那个 RPM,手动写 repo 文件 /etc/yum.repos.d/pgdg.repo。


坑 3:GPG Key 反复校验失败(最折腾的一坑)

手动写 repo 后,试了多个 key 地址:

Key 地址结果
ACCC4CF8.asc(APT key)导入成功但 RPM 不是这个签的,校验失败
RPM-GPG-KEY-PGDGkey 已安装,但"not correct for this package"
RPM-GPG-KEY-PGDG-EL9同样不匹配

报错核心:

GPG key is already installed but they are not correct for this package
Public key for postgresql17-17.11-1PGDG.rhel9.8.x86_64.rpm is not installed
根因:PGDG 的 RPM 包签名用的子 key 和 repo 元数据声明的 key 不一致,加上 OpenCloudOS 不是 PGDG 官方支持的系统,key 信任链不完整。

现象迷惑性:dnf 显示"Downloading Packages"进度条跑完(2.3M 下完了),但 GPG 校验在最后一步失败,包根本没写进文件系统。所以 /usr/pgsql-17/bin/pg_dump 一直不存在。


坑 4:装上了但默认 pg_dump 还是 15

最后用 --nogpgcheck 或换源装成功后:

pg_dump --version              # 15.19(/usr/bin/pg_dump)
/usr/pgsql-17/bin/pg_dump --version   # 17.11(✅)
PGDG 包故意把版本化客户端装到 /usr/pgsql-17/bin/,不覆盖 /usr/bin,避免破坏系统默认工具。这是设计行为,不是装错了。

最终可用方案

方案 A:宿主机装 PG17 客户端(--nogpgcheck 绕过)

sudo dnf install -y --nogpgcheck postgresql17
/usr/pgsql-17/bin/pg_dump -h 127.0.0.1 -p 5432 -U chen -d aikb -Fc -f backup.dump

方案 B:直接用 Docker 容器里的 pg_dump(最省事)

docker exec pg17 pg_dump -U chen -d aikb -Fc > backup.dump

方案 C:alternatives 切换系统默认

sudo alternatives --install /usr/bin/pg_dump pg_dump /usr/pgsql-17/bin/pg_dump 170
sudo alternatives --config pg_dump

关键教训

点结论
PGDG 官方源对国产 RHEL 兼容系支持不完整OpenCloudOS / TencentOS / Anolis 装 PGDG 包大概率踩 GPG 坑
dnf 下载完成 ≠ 安装成功GPG 校验在最后一步,失败则不落盘
pg_dump 版本必须 ≥ 服务端低版本直接 abort,不是警告
多版本共存是正常设计/usr/pgsql-17/bin/ 和 /usr/bin/ 各管各的
Docker 里跑 PG → 容器里备版本 100% 匹配,零依赖,最省心

一句话总结:国产 RHEL 系装 PGDG 官方 PostgreSQL 客户端 = GPG key 地狱,不如直接 docker exec pg_dump,或者 --nogpgcheck 强行装完用绝对路径。

本文内容仅代表作者个人观点、经历或转述,不代表任何官方立场,仅供参考,不构成任何专业建议。据此操作产生的风险由读者自行承担。
发布于 2026-10-15 14:59:26 ID: 20