将CSV文件导入PostgreSQL时忽略引号?

gra*_*tur 10 postgresql

我正在尝试将制表符分隔的文件导入我的PostgreSQL数据库.我文件中的一个字段是"标题"字段,偶尔包含实际引号.例如,我的tsv可能如下所示:

id    title
5     Hello/Bleah" Foo
Run Code Online (Sandbox Code Playgroud)

(是的,标题中只有一个引号.)

当我尝试将文件导入我的数据库时:

copy articles from 'articles.tsv' with delimiter E'\t' csv header;
Run Code Online (Sandbox Code Playgroud)

我得到这个错误,引用该行:

ERROR:  unterminated CSV quoted field
Run Code Online (Sandbox Code Playgroud)

我该如何解决?引号永远不会用于包围文件中的整个字段.我试过,copy articles from 'articles.tsv' with delimiter E'\t' escape E'\\' csv header;但我在同一行上得到了同样的错误.

dax*_*rod 7

假设文件实际上从未尝试引用其字段:

您想要的选项是"引用",请参阅http://www.postgresql.org/docs/8.2/static/sql-copy.html

不幸的是,我不确定如何完全关闭引用处理,一个问题就是指定一个根本没有出现在你的文件中的字符.

  • 很酷,谢谢!我随机试了一下`引用E'\ b'`,结果起作用了. (12认同)

wil*_*ser 6

制表符分隔是复制语句的默认格式.将它们视为CSV非常愚蠢.(你是否只是为了跳过标题而走这条路?)

copy articles from 'articles.tsv';
Run Code Online (Sandbox Code Playgroud)

完全符合你的要求.

  • 听起来很简单,但如果CSV数据包含反斜杠作为有效字段内容怎么办?(是的,我遇到过这种情况)COPY的默认格式将反斜杠视为转义字符,因此您必须使用CSV格式的COPY ... (2认同)