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

PostgreSQL 14升级至15时pg_upgrade执行失败问题求助

问题原因与解决办法

核心问题1:使用了错误版本的pg_upgrade

你第一次执行的是旧版本(14.9)的pg_upgrade,该版本工具仅支持升级至14.x系列集群,会强制校验新bin目录的PostgreSQL版本是否与自身同属14系列,因此才会出现“预期14.9,实际15.4”的报错——这是旧版工具的正常逻辑,它不支持跨大版本升级到15。

核心问题2:新数据目录状态异常

改用新版本(15.4)的pg_upgrade时,报错“只能升级到PostgreSQL 15”,说明你指定的--new-datadir目录已经是一个已初始化的15版本集群,或者未按要求准备空的新集群目录。正确的跨版本升级要求新数据目录必须是通过新版本initdb初始化的空集群。

正确操作步骤

  1. 停止新旧版本的PostgreSQL服务
  2. 用15.4版本的initdb初始化全新的空数据目录(若未完成):
    /usr/local/Cellar/postgresql@15/15.4/bin/initdb -D /usr/local/var/postgres.15.new
    
  3. 使用新版本的pg_upgrade执行升级:
    /usr/local/Cellar/postgresql@15/15.4/bin/pg_upgrade \
      --old-bindir /usr/local/Cellar/postgresql/14.9/bin/ \
      --new-bindir /usr/local/Cellar/postgresql@15/15.4/bin/ \
      --old-datadir /usr/local/var/postgres.14.9.backup \
      --new-datadir /usr/local/var/postgres.15.new
    
  4. 升级完成后,可将新数据目录替换为原/usr/local/var/postgres(操作前务必备份原目录)

关键注意事项

  • 跨大版本升级必须使用目标新版本的pg_upgrade工具,旧版本工具不支持向更高大版本升级
  • 新数据目录必须是未被使用过的空目录,或是刚用新版本initdb初始化的目录,不能指向已运行过的集群目录

内容的提问来源于stack exchange,提问作者David Lazar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:40:10