2013-03-07 172 views
4

我想導入CSV文件到PostgreSQL表(9.2)。我得到一個錯誤的列值有錯誤的輸入語法,但它似乎PostgreSQL不匹配列及其值。PostgreSQL - CSV文件導入錯誤

我導入CSV使用此命令:

\copy project_task from '/home/user/downloads/project_task_export.csv' WITH DELIMITER ',' CSV HEADER 

錯誤看起來是這樣的:

ERROR: invalid input syntax for integer: "4.25" 
CONTEXT: COPY project_task, line 3, column sequence: "4.25" 

我的CSV數據是這樣的:

id,create_uid,create_date,write_date,write_uid,remaining_hours,date_start,description,sequence,date_end,active,planned_hours,partner_id,delay_hours,user_id,name,date_deadline,notes,type_id,company_id,priority,total_hours,state,progress,user_group_id,project_id,effective_hours,context_id,timebox_id 
185,8,2012-06-05 09:51:09.562849,2012-09-10 08:52:05.789792,26,4.25,2012-06-19 15:54:07,"asdcxzzsrt ab cdefgqwer tyuipok asmmdmksa kmsaaqqwerr. 
",10,,t,12,,0.0,6,byrteqwas oeirklm askeiurjqqpl,,,,1,2,12.0,open,64.579999999999998,,9,7.75,1,4 

如果你仔細看在這個CSV數據和錯誤中,列順序是第9列,並且錯誤顯示看起來像PostgreSQL使用第6列值爲nin e欄。它爲什麼這樣做?或者,也許我做錯了什麼?

+0

你有一些不帶引號的字符串了。這在創建問題或實際數據時只是一個錯字嗎? – Tim 2013-03-07 13:45:10

+0

如果Daniel的答案沒有幫助,請發佈'\ d project_task'的結果,因爲這將顯示列的順序。我也建議刪除'DELIMITER',''因爲你也指定了CSV(因此它是默認的) – 2013-03-07 14:30:33

+0

@Tim這個CSV文件是使用另一個PostgreSQL數據庫創建的,不知道它爲什麼會產生一個字符串與引號,其他沒有。 – Andrius 2013-03-08 06:42:49

回答

7

推測問題在於CSV文件中列的順序與目標表中的順序不匹配。你會認爲COPY將映射根據第一行標題的列,但它實際上忽略了第一線,在此doc excerpt說:

HEADER
指定文件包含標題行與文件中每列的名稱 。在輸出上,第一行包含表格中的 列名稱,並且在輸入上,的第一行是 忽略。該選項僅在使用CSV格式時才被允許。

您需要的表的名稱,下令在文件中後添加到\copy列的列表中括號:

\copy project_task(id,create_uid,.....,context_id,timebox_id) from '/path/to/file'...