小版本与大版本升级均需执行:使用pg_dump工具备份目标数据库(如your_database_name),避免升级失败导致数据丢失。
命令示例:
pg_dump -U your_username -d your_database_name -f /path/to/backup.sql 若需备份所有数据库,可使用pg_dumpall:
pg_dumpall -U postgres -f /path/to/all_databases.sql 确认当前PostgreSQL版本,确保升级方向正确(如从14升级至15):
psql -V # 显示psql客户端版本(对应服务端版本) # 或 postgres -V 同步Debian官方仓库的最新软件包信息:
sudo apt update 若系统未添加PostgreSQL官方仓库,需手动配置以获取最新版本:
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 注:Debian 11及以上版本默认仓库可能包含较新PostgreSQL版本,无需额外添加。
通过APT安装目标版本(如postgresql-15),系统会自动处理依赖关系:
sudo apt install postgresql-15 安装完成后,新版本服务会自动启动,可通过psql -V确认版本是否更新。
升级前需停止PostgreSQL服务,避免文件冲突:
sudo systemctl stop postgresql 小版本升级无需迁移数据,仅替换二进制文件并更新数据目录结构:
sudo cp -r /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak sudo systemctl start postgresql psql -V # 应显示新版本号 大版本升级需使用pg_upgrade工具迁移数据,步骤如下:
检查兼容性:
运行pg_upgrade的--check模式,验证新旧版本兼容性(需指定新旧版本的二进制目录和数据目录):
sudo /usr/pgsql-15/bin/pg_upgrade \ --old-bindir /usr/pgsql-14/bin \ --new-bindir /usr/pgsql-15/bin \ --old-datadir /var/lib/postgresql/14/main \ --new-datadir /var/lib/postgresql/15/main \ --link --check 若输出无错误,继续下一步;若有错误,根据提示解决(如修改配置文件)。
执行升级(使用--link节省空间):
--link选项创建硬链接代替复制文件,大幅减少升级时间:
sudo /usr/pgsql-15/bin/pg_upgrade \ --old-bindir /usr/pgsql-14/bin \ --new-bindir /usr/pgsql-15/bin \ --old-datadir /var/lib/postgresql/14/main \ --new-datadir /var/lib/postgresql/15/main \ --link 清理旧文件:
升级完成后,旧版本数据目录仍会保留(如/var/lib/postgresql/14/main),可手动删除以释放空间:
sudo rm -rf /var/lib/postgresql/14/main psql -V # 应显示目标版本号(如15.x) psql -U your_username -d your_database_name -c "SELECT version();" --link选项风险:--link可节省空间,但若升级失败,需恢复旧版本数据目录;若使用--copy(复制文件),则更安全但耗时较长。