我正在尝试将csv文件导入PostgreSQL表(9.2)。我得到错误,一列值有错误的输入语法,但似乎PostgreSQL不匹配列及其值。
我正在使用此命令导入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使用第9列的第6列值。它为什么这样做?或者也许我做错了什么?
答案 0 :(得分:7)
据推测,问题是CSV文件中列的顺序与目标表中的顺序不匹配。您认为COPY
会根据第一行中的标题映射列,但它实际上会忽略第一行,如doc excerpt中所述:
HEADER
指定该文件包含带有名称的标题行 每个列的文件。在输出时,第一行包含 表中的列名和输入,第一行是 忽略即可。仅在使用CSV格式时才允许使用此选项。
您需要在表名后添加\copy
括号中的列列表,如文件中所示:
\copy project_task(id,create_uid,.....,context_id,timebox_id) from '/path/to/file'...