PostgreSQL使用pg_dump导出文件导入时报ÿ_附近语法错误如何解决
问题根本原因
你遇到的错误本质是Windows PowerShell 重定向操作的默认编码与PostgreSQL工具预期编码不匹配导致的:
- PowerShell 中使用
>重定向输出时,默认会采用 UTF-16 LE(Windows 系统下常称 Unicode)编码写入文件,编码开头会携带2字节的BOM(字节顺序标记)0xFF 0xFE,你看到的乱码ÿ_就是这个BOM被解析为文本字符的展示结果。 - pg_dump本身输出的是标准UTF-8编码的SQL内容,经过PowerShell重定向后会被强制转码为UTF-16 LE,psql读取文件时默认按UTF-8解析,就会把开头的BOM识别为非法SQL字符,抛出语法错误。
可行解决方案
- 优先使用pg_dump自带的
-f参数指定输出文件,绕过PowerShell重定向的编码转换逻辑:
pg_dump -U {user} -d {sourceDB} -t {sourceTable} -f {dump}.sql
- 若必须使用重定向操作,显式指定PowerShell输出编码为无BOM的UTF-8:
- PowerShell 7及以上版本可直接使用如下命令:
pg_dump -U {user} -d {sourceDB} -t {sourceTable} | Out-File -Encoding UTF8NoBOM {dump}.sql- 低版本PowerShell可先修改当前会话的默认输出编码,再执行导出:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' pg_dump -U {user} -d {sourceDB} -t {sourceTable} > {dump}.sql - 对已经生成的异常SQL文件,用文本编辑器(如VS Code)打开后转码保存为UTF-8编码,再执行导入操作即可正常执行。
内容的提问来源于stack exchange,提问作者chimpsociety
相关产品推荐
相关产品推荐

