PostgreSQL 12中COPY FROM无法用反斜杠转义CSV逗号分隔符
PostgreSQL 12 COPY导入CSV时反斜杠转义逗号无效的解决办法
问题原因
PostgreSQL的CSV导入模式遵循RFC 4180标准,该标准规定:字段内若包含分隔符(此处为逗号),需用双引号包裹字段,而非通过反斜杠转义。即便手动指定ESCAPE '\',CSV模式下该参数仅用于转义双引号(比如字段内的双引号需写成""或\"),无法识别反斜杠转义的逗号,最终导致导入失败。
解决方案
方案1:修改CSV文件(推荐,符合标准)
将包含逗号的字段用双引号包裹,替换原文件中的\,为直接保留逗号并加引号。例如:
- 原内容:
abc\,def,123 - 修改后:
"abc,def",123
之后使用你最初的COPY命令即可正常导入:
COPY myTable FROM '/tmp/myTest.csv' WITH CSV HEADER DELIMITER ',' ;
方案2:改用TEXT模式导入(无需修改文件)
如果不想调整文件格式,切换到PostgreSQL的TEXT导入模式,该模式支持反斜杠转义分隔符,命令如下:
COPY myTable FROM '/tmp/myTest.csv' WITH TEXT HEADER DELIMITER ',' ESCAPE '\' ;
注意:TEXT模式对表头的处理逻辑和CSV模式一致,需确保表头行无转义异常。
内容的提问来源于stack exchange,提问作者Guasqueño
相关产品推荐
相关产品推荐

