Windows系统Gitbash下Ruby on Rails应用pg_dump错误求助
解决Windows Git Bash下Heroku pg:pull的两个常见问题
我来帮你搞定Windows下Git Bash里用Heroku pg:pull遇到的这两个问题,都是我之前踩过的坑,分享给你:
问题1:pg_dump版本不匹配错误
报错信息:
pg_dump: server version: 10.1; pg_dump version: 9.6.6
pg_dump: aborting because of server version mismatch
原因
Git Bash自带的PostgreSQL工具(包括pg_dump)版本比Heroku服务器上的PostgreSQL版本低,PostgreSQL的pg_dump要求和服务器版本一致或兼容,版本差太多就会触发这个报错。
Windows下的解决办法
- 安装对应版本的PostgreSQL:去PostgreSQL官网下载和Heroku服务器版本一致的安装包(比如这里是10.x版本),安装时一定要勾选
Add PostgreSQL to PATH选项。如果没勾选,手动把PostgreSQL的bin目录(比如C:\Program Files\PostgreSQL\10\bin)添加到系统环境变量的PATH里,注意要放在Git Bash自带的pg工具路径前面。 - 重启Git Bash验证版本:关闭所有Git Bash窗口再重新打开,输入
pg_dump --version,确认显示的版本和Heroku服务器的一致。 - 直接指定pg_dump路径(如果PATH没生效):如果Git Bash还是优先调用旧版本,可以直接用完整路径调用pg_dump,比如在Git Bash里输入:
对应到heroku命令的话,其实"/c/Program Files/PostgreSQL/10/bin/pg_dump.exe" --versionheroku pg:pull会调用系统的pg_dump,只要PATH配置正确就会自动用新版本;如果还是不行,也可以手动导出再导入:heroku pg:dump --app myapps | "/c/Program Files/PostgreSQL/10/bin/psql.exe" mylocaldb
问题2:输出文件写入错误
报错信息:
pg_dump: saving encoding = UTF8
pg_dump: saving standard_conforming_strings = on
pg_dump: saving database definition
pg_dump: [custom archiver] could not write to output file: Invalid argument
可能的原因
- 路径格式问题:Windows下的路径在Git Bash里如果用了Windows风格的反斜杠(比如
C:\Users\...),或者路径里有空格/特殊字符没转义,pg_dump会识别错误。 - 权限不足:你要写入的目录没有写入权限(比如系统盘根目录、Program Files文件夹)。
- 文件名/路径过长:Windows对文件路径长度有限制,超过260字符就会触发报错。
解决办法
- 使用Git Bash风格的路径:尽量用相对路径或者Unix风格的绝对路径,比如把数据库写到当前项目目录:
或者写到用户目录:heroku pg:pull DATABASE_URL ./mylocaldb --app myappsheroku pg:pull DATABASE_URL ~/mylocaldb --app myapps - 检查写入权限:把数据库文件放到自己有权限的目录,比如
C:\Users\你的用户名\Projects下,避免写到受系统保护的文件夹。 - 简化文件名和路径:不要用带空格、中文或特殊字符的文件名,尽量短一些,避免路径过长。
- 绕过文件写入直接导入:用管道直接把导出的内容导入本地数据库,跳过写入文件的步骤,命令如下:
这个方法通常能避开路径和权限的问题,我自己遇到这个错误时就是用这个方法解决的。heroku pg:dump --app myapps | psql mylocaldb
内容的提问来源于stack exchange,提问作者ckeat9
相关产品推荐
相关产品推荐

