PostgreSQL 13备份恢复至15后启动失败求助(pgBackRest工具)
解决PostgreSQL 13备份恢复至15后启动失败的问题
PostgreSQL跨大版本(如13→15)的存储格式不兼容,直接恢复低版本数据目录到高版本实例会触发版本不兼容报错,必须通过pg_upgrade工具完成数据格式升级,以下是具体操作步骤:
操作步骤
停止PostgreSQL 15服务
sudo systemctl stop postgresql@15-main用pgBackRest将备份恢复至临时目录
将备份恢复到非15数据目录的临时路径,避免覆盖空的15数据目录:pgbackrest restore --stanza=your_stanza --db-path=/tmp/pg13_data替换
your_stanza为实际的pgBackRest stanza名称,/tmp/pg13_data可根据实际磁盘空间调整。初始化PostgreSQL 15空数据目录
若之前已创建过15的数据目录,先清空后再初始化:sudo -iu postgres initdb -D /var/lib/postgresql/15/main路径需对应你的PostgreSQL 15数据目录(Debian/Ubuntu默认路径如上)。
执行版本升级(pg_upgrade)
首先切换到postgres用户:sudo -iu postgres先运行预检查命令验证升级条件:
pg_upgrade \ --old-datadir=/tmp/pg13_data \ --new-datadir=/var/lib/postgresql/15/main \ --old-bindir=/usr/lib/postgresql/13/bin \ --new-bindir=/usr/lib/postgresql/15/bin \ --check若预检查无错误,去掉
--check执行实际升级:pg_upgrade \ --old-datadir=/tmp/pg13_data \ --new-datadir=/var/lib/postgresql/15/main \ --old-bindir=/usr/lib/postgresql/13/bin \ --new-bindir=/usr/lib/postgresql/15/bin注意:
--old-bindir和--new-bindir需对应你服务器上PostgreSQL 13和15的二进制文件目录,若路径不同请自行调整。启动PostgreSQL 15服务并验证
sudo systemctl start postgresql@15-main登录验证版本和数据:
sudo -iu postgres psql -c "SELECT version();" sudo -iu postgres psql -c "\l"
关键注意事项
- 升级前确保目标磁盘有足够空间,至少为旧数据目录大小的1.5倍。
- 临时恢复目录需赋予
postgres用户读写权限。 - 升级完成后可删除临时的PostgreSQL 13数据目录
/tmp/pg13_data。
内容的提问来源于stack exchange,提问作者Deo Felix
相关产品推荐
相关产品推荐

