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
相关产品推荐
相关产品推荐

