这是一个在Ubuntu服务器上将现有的PostgreSQL 14版本升级到PostgreSQL 16并且进行数据迁移的实际过程的指南,过程中没有数据丢失。
从全体数据备份、新版本安装、数据恢复到卸载旧版本,整个过程都进行了分步骤的安排。

PostgreSQL upgrade from 14 to 16 symbol

1. 检查当前PostgreSQL版本和集群状态

psql --version
pg_lsclusters

请确认集群状态中14/main是否处于激活状态。


2. 全体数据备份

PostgreSQL可以通过pg_dumpall命令进行包括完整数据库、用户及权限信息的备份。

sudo -u postgres pg_dumpall > ~/pg_backup_all.sql

备份验证示例(可选)

head ~/pg_backup_all.sql
tail ~/pg_backup_all.sql

检查文件存在性及大小

ls -lh ~/pg_backup_all.sql

3. 安装PostgreSQL 16

3-1. 注册官方库

sudo apt update
sudo apt install wget ca-certificates -y
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/pgdg.gpg
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" |   sudo tee /etc/apt/sources.list.d/pgdg.list

3-2. 安装PostgreSQL 16

sudo apt update
sudo apt install postgresql-16 -y

安装完成后,再次检查集群状态。

pg_lsclusters

4. 切换集群

停止旧版14,并启动16版本。

sudo systemctl stop postgresql@14-main
sudo systemctl start postgresql@16-main

5. 数据恢复(到PostgreSQL 16)

在恢复之前,请确认新安装的16版本能够正常连接。
(端口号可在pg_lsclusters中查看)

sudo -u postgres psql -p 5433

如果连接正常,使用以下命令恢复备份的数据:

sudo -u postgres psql < ~/pg_backup_all.sql

可以通过less ~/pg_backup_all.sql | grep ERROR检查是否发生了错误。


6. 卸载PostgreSQL 14(可选)

如果升级及数据恢复完成且没有问题,可以选择卸载PostgreSQL 14:

sudo pg_dropcluster 14 main --stop
sudo apt remove postgresql-14 -y

总结

这一过程将对需要在Ubuntu服务器上将PostgreSQL从14升级到16的人非常有用。
数据备份 → 新版本安装 → 恢复 → 卸载旧版的顺序可以安全地进行版本切换。

服务器的用户名、端口号等请根据您自己的环境进行调整。