升级前必须备份数据,防止操作失误导致数据丢失。推荐使用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修复。