2017-07-25 55 views
1

當我嘗試用分隔符|導入數據我收到錯誤:錯誤:去年預期的列後額外的數據 - COPY

ERROR: extra data after last expected column

我可以,如果我刪除雙引號或單引號加載數據從下面的示例數據有問題的領域,但我的要求是我需要所有的數據,而不刪除任何。

這是我的複製命令:

COPY public.dimingredient FROM '/Users//Downloads/archive1/test.txt' 
DELIMITER '|' NULL AS '' CSV HEADER ESCAPE AS '"' ; 

我的表:

public.dimingredient 
(
    dr_id integer NOT NULL, 
    dr_loadtime timestamp(6) without time zone NOT NULL, 
    dr_start timestamp(6) without time zone NOT NULL, 
    dr_end timestamp(6) without time zone NOT NULL, 
    dr_current boolean NOT NULL, 
    casnumber character varying(100) COLLATE pg_catalog."default" NOT NULL, 
    ingredientname character varying(300) COLLATE pg_catalog."default" NOT NULL, 
    matchingstrategy character varying(21) COLLATE pg_catalog."default", 
    percentofconfidence double precision, 
    disclosurestatus character varying(42) COLLATE pg_catalog."default", 
    issand character varying(1) COLLATE pg_catalog."default", 
    sandmeshsize character varying(20) COLLATE pg_catalog."default", 
    sandquality character varying(20) COLLATE pg_catalog."default", 
    isresincoated character varying(1) COLLATE pg_catalog."default", 
    isartificial character varying(1) COLLATE pg_catalog."default", 
    CONSTRAINT dimingredient_pkey PRIMARY KEY (dr_id) 
) 

我的數據:

5144|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|"9-octadecenamide,n,n-bis(2-hydroxyethyl)-, (9z)"|"NO CAS MATCH FOUND"||Disclosed||||| 

5145|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|"9-octadecenamide,n,n-bis-2(hydroxy-ethyl)-,(z)""|"NO CAS MATCH FOUND"||Disclosed||||| 
+0

最後一個分隔符沒有跟隨它?是否應該有一些數據在那裏?你能向我們展示你正在加載的桌子嗎? – Mokadillion

+0

@rajkumars - 你應該編輯你的帖子,而不是粘貼評論中的所有內容。我添加了表DDL以及一些格式,但沒有複製您的數據,因爲它被截斷,我不想歪曲它。不過,如果它不是敏感信息,則應該用文件中的一行或兩行更新您的問題。 – Nicarus

+0

如何定義'public.table'?它有多少列? –

回答

0

忽略你dample數據中的空行,我得到一個不同的錯誤消息9.6,機智:

ERROR: unterminated CSV quoted field 
CONTEXT: COPY dimingredient, line 3: "5145|2016-07-01 13:34:25.1001891|1900-01-01 00:00:00.0000000|9999-12-31 23:59:59.9999999|True|93834|..." 

奇怪的是,自從8.012版本中引入了CSV COPY以來,該錯誤消息一直存在,所以我想知道您的數據與上面顯示的數據的不同之處。

錯誤消息很容易解釋:第二行中有奇數個引號字符(")。

由於兩個翻番引用字符串引號("轉義爲"")解釋爲一個單一的雙引號,在第二行的字段是:

5145 
2016-07-01 13:34:25.1001891 
1900-01-01 00:00:00.0000000 
9999-12-31 23:59:59.9999999 
True 
93834 
9-octadecenamide,n,n-bis-2(hydroxy-ethyl)-,(z)"|NO CAS MATCH FOUND||Disclosed||||| 

...然後COPY命中解析帶引號的字符串時文件結尾。因此錯誤。

解決方法是每場使用偶數個字符"

如果您需要在字段中輸入"字符,請選擇不同的QUOTE或引用該字段並加倍輸入"

+0

我厭倦了所有的方式它沒有工作......我需要所有的領域沒有刪除任何因爲我的數據有腳和英寸.. –

+0

「我試過所有的方式,它不工作」幾乎沒有繼續下去。您應該擴展問題並準確顯示您嘗試的內容以及您得到的確切消息。還有一個未解決的問題是,沒有PostgreSQL的版本會產生你用你在問題中顯示的數據報告的錯誤信息。 –