You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 13备份恢复至15后启动失败求助(pgBackRest工具)

解决PostgreSQL 13备份恢复至15后启动失败的问题

PostgreSQL跨大版本(如13→15)的存储格式不兼容,直接恢复低版本数据目录到高版本实例会触发版本不兼容报错,必须通过pg_upgrade工具完成数据格式升级,以下是具体操作步骤:

操作步骤

  1. 停止PostgreSQL 15服务

    sudo systemctl stop postgresql@15-main
    
  2. 用pgBackRest将备份恢复至临时目录
    将备份恢复到非15数据目录的临时路径,避免覆盖空的15数据目录:

    pgbackrest restore --stanza=your_stanza --db-path=/tmp/pg13_data
    

    替换your_stanza为实际的pgBackRest stanza名称,/tmp/pg13_data可根据实际磁盘空间调整。

  3. 初始化PostgreSQL 15空数据目录
    若之前已创建过15的数据目录,先清空后再初始化:

    sudo -iu postgres initdb -D /var/lib/postgresql/15/main
    

    路径需对应你的PostgreSQL 15数据目录(Debian/Ubuntu默认路径如上)。

  4. 执行版本升级(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的二进制文件目录,若路径不同请自行调整。

  5. 启动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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:57:02