PostgreSQL - CSV文件导入错误

And*_*ius 4 csv postgresql postgresql-9.2

我正在尝试将csv文件导入PostgreSQL表(9.2).我得到错误,一列值有错误的输入语法,但似乎PostgreSQL不匹配列及其值.

我用这个命令导入CSV:

\copy project_task from '/home/user/downloads/project_task_export.csv' WITH DELIMITER ',' CSV HEADER
Run Code Online (Sandbox Code Playgroud)

错误看起来像这样:

ERROR:  invalid input syntax for integer: "4.25"
CONTEXT:  COPY project_task, line 3, column sequence: "4.25"
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

如果仔细查看此CSV数据和错误,列序列是第9列,并且错误显示看起来像PostgreSQL使用第9列的第6列值.它为什么这样做?或者也许我做错了什么?

Dan*_*ité 7

据推测,问题是CSV文件中列的顺序与目标表中的顺序不匹配.您认为COPY会根据第一行中的标题映射列,但它实际上忽略了第一行,如本文摘要中所述:

HEADER
指定文件包含标题行,其中包含文件中每列的名称.在输出时,第一行包含表中的列名,在输入时,第一行被忽略.仅在使用CSV格式时才允许此选项.

您需要\copy在表名后添加到括号中的列列表中,如文件中所示:

\copy project_task(id,create_uid,.....,context_id,timebox_id) from '/path/to/file'...
Run Code Online (Sandbox Code Playgroud)