Linux

时间:2018-05-02 23:33:38

标签: sql linux postgresql pgadmin

功能
Linux Mint 18.x
Posgres 10.x
Pgadmin3

我已尝试在TSV中加载到postgres中,但仍然收到文字回车错误。在文件中," \ N"用于表示NULL。

我已尝试同时使用\copy并使用pgadmin3中的导入对话框。在pgadmin3中,我试图省略文件格式化,并尝试将其设置为UTF8。错误仍然存​​在。

使用的初始命令:

\copy table FROM PROGRAM 'tail -n +2 /home/super/Downloads/folder/myfile.tsv'

ERROR; literal carriage return found in data
HINT: use "\r" to represent carriage return.

我一直在使用sed创建不同版本的文件来替换我认为可能导致错误的文件:

sed 's/\n/\r/g myfile.tsv > newfile1.tsv'
sed 's/\\n/\r/g myfile.tsv > newfile2.tsv'
sed 's/\\n//g myfile.tsv > newfile3.tsv'

我也尝试了以下(非按时间顺序排列)

sed 's/\r\n/\r/g' new.tsv

sed 's/\\N/NULL/g' new.tsv

sed 's/\\//' 

sed 's/\\N/\r/' 

sed -n 's/\n/\r/' 

sed -n 's/\\n/\r/' 

sed 's/\N/\r/' 

sed 's/\\N/NULL/' 

sed 's/\N/NULL/' 

sed 's/\r//' 

sed 's/\N/NULL/' 

sed 's/\\N/NULL/' 

sed 's/\\//' 

sed 's/\N/\r/g' new.tsv

sed 's/\N/NULL/g' new.tsv

sed 's/\N/NULL/g' new.tsv  

这些都没有奏效。当我使用LibreOffice的预览对话框查看时,它似乎会滚动浏览内容并将它们格式化为表格。

我查看了this关于字面换行错误和this question about using copy的问题。

我不明白错误字节的含义是什么?'插入。

预览数据:https://imgur.com/JPhHB52 broken tsv

更新:运行sed 's/\r/CR was here/g' myfile.tsv | grep 'CR was here'并返回两个结果

1 个答案:

答案 0 :(得分:0)

这可以通过以下方式解决: sed 's/\r//\\r/g' myfile.tsv > myfile_copy.tsv

显然需要两次逃脱。

@Abelisto指出了这条评论中出现的错误:

  

好的,有一种相对简单的方法可以重现错误:echo -e 'aaa\nbbb\rccc' > foo.tsv ; psql -c 'create table foo(x text)' -c '\copy foo from foo.tsv' -c 'drop table foo;'(如果你这么做的话要小心)   已经在你的数据库中有有价值的foo表)让我们试着找到如何   解决它......

也很有帮助:

  

echo -e 'aaa\nbbb\rccc' > foo.tsv ; sed -i 's/\r/\\r/g' foo.tsv ;   psql -c 'create table foo(x text)' -c "\copy foo from foo.tsv" -c   'table foo' -c 'drop table foo;'修正了错误。我不明白为什么   \ r \ n序列没有通过复制命令转换为CR,如中所述   文件。但这是另一个问题。 - 阿贝利斯托