PostgreSQL - CSV文件导入错误

时间:2013-03-07 08:26:05

标签: postgresql csv postgresql-9.2

我正在尝试将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列值。它为什么这样做?或者也许我做错了什么?

1 个答案:

答案 0 :(得分:7)

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

  

HEADER
  指定该文件包含带有名称的标题行   每个列的文件。在输出时,第一行包含   表中的列名和输入,第一行是   忽略即可。仅在使用CSV格式时才允许使用此选项。

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

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