Ubuntu升级PostgreSQL版本的详细步骤
pg_dumpall
工具导出所有数据库到一个SQL文件:sudo -u postgres pg_dumpall > /path/to/backup.sql
sudo -u postgres psql -c "SELECT version();"
小版本升级通常通过包管理器直接完成,无需初始化新集群,步骤较简单:
sudo systemctl stop postgresql
sudo apt update
sudo apt upgrade postgresql-14 # 替换为当前主版本号(如14)
sudo systemctl start postgresql
psql --version # 确认版本已更新
大版本升级需安装新版本软件包并通过pg_upgrade
工具迁移数据,步骤如下:
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 # 替换为目标版本号(如15)
sudo systemctl stop postgresql
sudo /usr/lib/postgresql/15/bin/pg_ctl initdb -D /var/lib/postgresql/15/main/
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 -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
sudo -u postgres pg_dumpall -f /path/to/backup.sql
初始化新集群并启动服务:sudo /usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main/
sudo systemctl start postgresql@15-main
导入数据:sudo -u postgres psql -f /path/to/backup.sql postgres
postgresql.conf
、pg_hba.conf
)到新目录:sudo cp /etc/postgresql/14/main/*.conf /etc/postgresql/15/main/
sudo sed -i 's/port = 5432/port = 5433/' /etc/postgresql/15/main/postgresql.conf
sudo systemctl start postgresql@15-main
sudo -u postgres psql -p 5433 -c "SELECT version();" # 确认新版本运行正常
sudo apt remove postgresql-14 postgresql-server-dev-14 # 替换为旧版本号
sudo pg_dropcluster 14 main --stop # 删除旧集群
sudo systemctl status postgresql@15-main
settings.py
)中的PostgreSQL版本号和连接端口,验证应用是否能正常访问数据库。pg_stat_activity
、pg_stat_user_tables
等视图排查问题。