在 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 的用戶會很有幫助。
數據備份 → 新安裝 → 恢復 → 移除舊版本,按照順序安全地進行版本切換。

伺服器的用戶名、端口號等可以根據您的環境進行調整。