2011-09-11 136 views
8

我试图将制表符分隔的文件导入到我的PostgreSQL数据库中。我的文件中的一个字段是“标题”字段,偶尔会包含实际的引号。例如,我的TSV可能看起来像:将CSV文件导入PostgreSQL时忽略引号?

id title 
5  Hello/Bleah" Foo 

(是的,但只是在标题一个引号。)

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

copy articles from 'articles.tsv' with delimiter E'\t' csv header; 

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

ERROR: unterminated CSV quoted field 

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

回答

4

制表符分隔是复制语句的默认格式。将它们视为CSV只是愚蠢的。 (你采取这种方式只是为了跳过标题?)

copy articles from 'articles.tsv'; 

确实如你所愿。

+2

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

+0

我没有想过那个。是的:这很有道理。 – wildplasser

6

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

你想要的选项是“帖”,见http://www.postgresql.org/docs/8.2/static/sql-copy.html

不幸的是,我不知道怎样彻底关闭报价处理,一个kludge应该是指定一个完全不出现在你的文件中的字符。

+10

很酷,谢谢!我随机尝试了'引用E'\ b'',后来结束了工作。 – grautur

+0

@grautur E'\ b'是什么意思?退格? 'E'呢? “转义字符串常量” - 明白了。 –