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

Linux环境下PostgreSQL导入TSV时出现字面回车错误求助

解决PostgreSQL导入TSV时的“literal carriage return”错误

你遇到的这个错误大概率是因为TSV文件里藏着实际的回车符(\r,也就是Windows风格换行符里的那个额外字符),而PostgreSQL的文本导入解析器默认只认Unix风格的换行符(\n),碰到单独的\r就会触发这个报错。结合你的环境和试过的方法,给你几个可行的解决方案:

1. 先检查并修复文件的换行符

先确认文件里确实有多余的回车符:

cat -A /home/super/Downloads/folder/myfile.tsv

这个命令会把文件里的不可见字符显形——如果看到^M,那就是Windows风格的\r\n换行符在搞鬼。

修复的话直接用dos2unix转成Unix格式:

dos2unix /home/super/Downloads/folder/myfile.tsv

转换完再用原来的\copy命令或者Pgadmin3导入,应该就能解决问题。

2. 不修改原文件,在\copy命令里过滤回车符

要是不想改动原文件,可以在tail输出后加一步过滤,用tr命令删掉所有回车符:

\copy your_table_name FROM PROGRAM 'tail -n +2 /home/super/Downloads/folder/myfile.tsv | tr -d ''\r''' WITH (FORMAT tsv, NULL '\N', ENCODING 'UTF8');

这里明确指定了格式为tsv,空值字符串是\N,同时通过管道把所有\r字符去掉,避免解析报错。

3. 调整Pgadmin3的导入设置

在Pgadmin3的导入对话框里,除了设置编码为UTF8,还得做这些调整:

  • 选择“格式”为文本
  • 设置“字段分隔符”为制表符(直接输入\t就行)
  • 在“选项”里,把“空值字符串”设为\N
  • 如果文件是Windows换行符,试试在“行分隔符”里输入\n,或者勾选“忽略回车符”(如果有这个选项的话)

4. 改用CSV格式指定参数的方式导入

有时候TSV的默认解析会有歧义,改用CSV格式但指定制表符分隔,反而更稳定:

\copy your_table_name FROM PROGRAM 'tail -n +2 /home/super/Downloads/folder/myfile.tsv' WITH (
    FORMAT csv,
    DELIMITER E'\t',
    NULL '\N',
    ENCODING 'UTF8',
    HEADER false
);

这里明确告诉PostgreSQL用制表符分隔,空值是\N,同时关闭表头(因为你用了tail跳过第一行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:32:31