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

brew安装的PostgreSQL14与v12数据文件不兼容无法启动该如何解决

PostgreSQL 跨版本数据不兼容最优解决路径

分两种可选方案,按需选择:


方案1:将v12数据迁移至v14,继续使用默认brew最新版本

  • 第一步:停止所有运行中的PostgreSQL进程,避免冲突
brew services stop postgresql
brew services stop postgresql@12
# 额外排查残留进程,有就杀掉
ps aux | grep postgres | grep -v grep | awk '{print $2}' | xargs kill -9
  • 第二步:用v12版本挂载旧数据目录,导出全量备份
# 用v12指定旧数据目录启动,默认旧数据目录为/usr/local/var/postgres
/usr/local/opt/postgresql@12/bin/pg_ctl -D /usr/local/var/postgres start
# 全库导出所有数据、权限、配置,备份文件存放在当前目录
pg_dumpall -f full_postgres_v12_backup.sql
# 导出完成后停止v12服务
/usr/local/opt/postgresql@12/bin/pg_ctl -D /usr/local/var/postgres stop
  • 第三步:初始化v14版本的新数据目录
# 备份原有旧数据目录,防止操作丢失
mv /usr/local/var/postgres /usr/local/var/postgres_v12_raw_backup
# 初始化v14数据目录,可根据你系统可用的locale调整(执行locale -a查看支持的locale)
/usr/local/opt/postgresql/bin/initdb -D /usr/local/var/postgres -E UTF8 --lc-collate=zh_CN.UTF-8 --lc-ctype=zh_CN.UTF-8
  • 第四步:启动v14服务,导入备份
brew services start postgresql
# 导入全量备份
psql -d postgres -f full_postgres_v12_backup.sql

操作完成后验证所有数据库、表数据正常即可。


方案2:保留v12版本为默认使用版本,不升级数据

  • 第一步:停止所有PostgreSQL进程,操作同方案1第一步
  • 第二步:修改v12版本的启动配置,指定旧数据目录
    打开/usr/local/opt/postgresql@12/homebrew.mxcl.postgresql@12.plist文件,找到ProgramArguments数组里的-D参数对应的路径,修改为/usr/local/var/postgres
  • 第三步:将v12设为brew默认PostgreSQL版本
brew unlink postgresql
brew link --force postgresql@12
# 验证版本是否切换成功,输出为12.x即为正常
psql --version
  • 第四步:启动v12服务
brew services start postgresql@12

启动完成后即可看到原有所有数据库。


注意事项

  • 所有操作前建议先完整备份/usr/local/var/postgres目录,避免操作失误导致数据丢失
  • 方案1中initdb报错通常是因为locale参数和旧数据的locale不匹配,可通过locale -a查询系统支持的locale后替换即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:24:08