Ubuntu PostgreSQL如何升级版本
导读:Ubuntu 上 PostgreSQL 升级指南 一 升级前准备 备份全部数据(强烈建议):使用物理备份或逻辑备份,例如对所有数据库执行逻辑导出:sudo -u postgres pg_dumpall > /path/to/back...
Ubuntu 上 PostgreSQL 升级指南
一 升级前准备
- 备份全部数据(强烈建议):使用物理备份或逻辑备份,例如对所有数据库执行逻辑导出:
sudo -u postgres pg_dumpall > /path/to/backup.sql。小版本升级通常可直接通过包管理器完成;大版本升级(如 14 → 15)需按兼容性说明执行升级流程。检查当前版本:sudo -u postgres psql -c "SELECT version(); "。准备维护窗口,避免业务写入。
二 小版本升级
- 适用于同一主版本内的补丁升级(如 14.5 → 14.7)。步骤:
- 停止服务:
sudo systemctl stop postgresql - 更新软件包索引:
sudo apt update - 升级当前主版本包:
sudo apt upgrade postgresql-14(将 14 替换为你的实际主版本) - 启动服务:
sudo systemctl start postgresql - 验证:
sudo -u postgres psql -c "SELECT version(); "
- 停止服务:
三 大版本升级
-
适用于跨主版本(如 14.x → 15.x)。思路是安装新版本,再用工具迁移数据(推荐 pg_upgrade;兼容性要求高时可用逻辑转储)。示例以 14 → 15 为例,路径与版本号请按实际环境调整。
-
安装新版本
- 添加官方仓库并安装新版本(若尚未使用官方源):
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update sudo apt install postgresql-15 - 安装完成后,系统会为新版本创建新的数据目录(如 /var/lib/postgresql/15/main),但默认不会自动启动或迁移数据。
- 添加官方仓库并安装新版本(若尚未使用官方源):
-
方式一 pg_upgrade(速度快,需二进制兼容)
- 停止旧版本:
sudo systemctl stop postgresql - 执行检查(不真正升级):
sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade \ -b /usr/lib/postgresql/14/bin \ -B /usr/lib/postgresql/15/bin \ -d /var/lib/postgresql/14/main \ -D /var/lib/postgresql/15/main \ --check - 执行升级(检查通过后):
sudo -u postgres /usr/lib/postgresql/15/bin/pg_upgrade \ -b /usr/lib/postgresql/14/bin \ -B /usr/lib/postgresql/15/bin \ -d /var/lib/postgresql/14/main \ -D /var/lib/postgresql/15/main \ -o '-c config_file=/etc/postgresql/14/main/postgresql.conf' \ -O '-c config_file=/etc/postgresql/15/main/postgresql.conf' - 启动新版本:
sudo systemctl start postgresql@15-main - 重建统计信息:
sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages - 升级完成后,按脚本提示运行
analyze_new_cluster.sh,确认无误后再运行delete_old_cluster.sh清理旧集群。
- 停止旧版本:
-
方式二 逻辑转储(最稳妥,跨版本兼容性好)
- 导出旧库:
sudo -u postgres pg_dumpall -f /path/to/backup.sql - 初始化新集群(若尚未初始化):
sudo /usr/lib/postgresql/15/bin/pg_ctl initdb -D /var/lib/postgresql/15/main/ - 启动新版本:
sudo systemctl start postgresql@15-main - 导入数据:
sudo -u postgres psql -f /path/to/backup.sql postgres - 重建统计信息:
sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages。
- 导出旧库:
四 常见问题与排错
- 客户端与服务端版本不匹配
- 现象:
pg_dump: 错误: 服务器版本: 15.5; pg_dump 版本: 13.14,说明本地 pg_dump 过旧。解决:安装与新服务器匹配的客户端工具(如安装 postgresql-15 附带的客户端),或用新版本服务器上的pg_dump远程导出。
- 现象:
- 端口与集群管理
- 若新版本安装后自动创建了新集群并启动,而你希望先迁移再切换,可先停止新版本服务(如
sudo systemctl stop postgresql@15-main),完成迁移后再启动;必要时调整postgresql.conf中的 port 避免端口冲突,升级验证无误后再恢复为 5432。
- 若新版本安装后自动创建了新集群并启动,而你希望先迁移再切换,可先停止新版本服务(如
- 远程访问与认证
- 如需远程连接,编辑新版本的
/etc/postgresql/15/main/pg_hba.conf与postgresql.conf:将listen_addresses设为'*',并在pg_hba.conf中对需要的来源配置 md5 或 scram-sha-256 认证;修改后重启服务生效。
- 如需远程连接,编辑新版本的
- 清理旧版本
- 确认新版本运行稳定、统计信息重建完成且业务验证通过后,再卸载旧版本软件包并删除旧集群目录(参考
delete_old_cluster.sh的输出或手动清理),避免误删导致回滚困难。
- 确认新版本运行稳定、统计信息重建完成且业务验证通过后,再卸载旧版本软件包并删除旧集群目录(参考
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu PostgreSQL如何升级版本
本文地址: https://pptw.com/jishu/757785.html
