2011-09-11 137 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'呢? 「轉義字符串常量」 - 明白了。 –