Ubuntu升级后PostgreSQL软件包未正常升级相关问题咨询
问题根因
当前带pgdg18.04标识的PostgreSQL包,是Ubuntu 18.04阶段从PostgreSQL第三方源安装的版本。系统跨大版本升级时第三方源会被默认禁用,这些包就以本地安装的状态留存下来,没有随系统版本切换到22.04(Jammy)的对应构建版本,最终形成部分包来自22.04系统源、部分包是旧18.04构建版本的混合安装状态。
正确升级操作步骤
所有操作前必须先做全量数据备份,避免操作失误导致数据丢失:
- 执行备份命令导出全库数据:
pg_dumpall > /opt/pg_full_backup_$(date +%Y%m%d).sql,备份文件存放到非数据库数据目录的独立路径,确认备份文件大小正常、可读取后再进行后续操作。 - 清理旧的第三方源配置:删除
/etc/apt/sources.list.d/目录下所有名称带pgdg、postgresql的旧源配置文件,避免后续拉取到错误版本的安装包。 - 执行
apt update刷新本地软件源索引。 - 先执行
apt --fix-broken install修复当前混合安装状态下的依赖异常,再执行强制重装命令:apt install --reinstall postgresql-14 postgresql-client-14 postgresql-common postgresql-client-common postgresql-server-dev-14,从当前22.04系统源拉取对应适配版本的包,覆盖旧的18.04构建二进制。 - 重装完成后执行
systemctl restart postgresql重启数据库服务,连接数据库执行select version();,确认输出中的编译标记替换为Ubuntu 22.04对应标识即可。 - 最后执行
apt autoremove清理残留的无用依赖包。
运行旧版编译二进制的不良影响
- 稳定性风险极高:旧版二进制是针对Ubuntu 18.04的glibc、系统库编译,22.04的系统基础库版本跨度大,后续系统更新基础库后,大概率出现符号缺失、服务启动失败、查询随机报错、内存越界等问题,没有运行稳定性保障。
- 安全补丁缺失:当前安装的14.4-1.pgdg18.04+1版本不会再收到更新,22.04系统源已经推送了该版本后续的安全修复、bug修复包,长期运行旧版本存在已知漏洞被利用的风险。
- 组件兼容性问题:当前安装的postgresql-client、postgresql-contrib等元包已经是22.04版本,和旧版核心服务包混装,很容易出现扩展加载失败、备份工具版本不匹配导致恢复失败、命令行工具连接异常等问题。
对数据库运行性能的影响
- 短期低负载运行如果没有触发兼容性bug,不会出现明显的性能异常,但旧版本是用gcc 7.5编译,22.04源中的PostgreSQL包采用更高版本gcc编译,针对新系统的CPU指令集、glibc性能逻辑做了适配优化,相同业务负载下普遍有5%~15%的性能差距,复杂查询、高并发、大表排序场景下差距会更明显。
- 旧版二进制没有适配22.04内核的新IO、内存管理特性,高负载场景下更容易出现IO等待过高、内存占用异常波动的问题,不适合长期承载生产业务负载。
内容的提问来源于stack exchange,提问作者Maxpain
相关产品推荐
相关产品推荐

