升級前必須備份數據,防止操作失誤導致數據丟失。推薦使用pg_dumpall
備份所有數據庫:
sudo -u postgres pg_dumpall -f /var/backups/postgresql_backup.sql
也可備份單個數據庫:
pg_dump -U your_username -d your_database_name -f /path/to/backup.sql
確保系統包為最新狀態,避免依賴沖突:
sudo apt update && sudo apt upgrade -y
Debian官方倉庫的PostgreSQL版本可能較舊,添加官方倉庫可獲取最新穩定版:
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
注意:Debian 11及以上版本可能需要使用
gpg
命令替代apt-key
(如gpg --dearmor -o /usr/share/keyrings/pgdg-archive-keyring.gpg ACCC4CF8.asc
)。
小版本升級無需遷移數據,直接通過APT安裝新版本即可:
sudo apt install postgresql-13 # 替換為目標小版本號
sudo systemctl restart postgresql
升級后驗證版本:
psql --version # 應顯示新版本號
大版本升級需使用pg_upgrade
工具遷移數據,步驟更復雜:
sudo apt install postgresql-13 # 替換為目標大版本號
sudo systemctl stop postgresql@12-main # 替換為舊版本的主進程名
sudo -u postgres /usr/lib/postgresql/13/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/12/main \
--new-datadir=/var/lib/postgresql/13/main \
--old-bindir=/usr/lib/postgresql/12/bin \
--new-bindir=/usr/lib/postgresql/13/bin \
--check
若輸出無錯誤,繼續執行升級(去掉--check
參數)。
sudo -u postgres /usr/lib/postgresql/13/bin/pg_upgrade \
--old-datadir=/var/lib/postgresql/12/main \
--new-datadir=/var/lib/postgresql/13/main \
--old-bindir=/usr/lib/postgresql/12/bin \
--new-bindir=/usr/lib/postgresql/13/bin \
--link # 使用硬鏈接減少磁盤空間占用
升級完成后,刪除舊版本包和數據目錄(確認新版本運行正常后再執行):
sudo apt remove postgresql-12
sudo rm -rf /var/lib/postgresql/12
psql -U postgres -c "SELECT version();"
sudo apt --fix-broken install
修復。