4

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

4

1 回答 1

7

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

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

您需要\copy在表格名称后的括号中添加列列表,按文件中的顺序排列:

\copy project_task(id,create_uid,.....,context_id,timebox_id) from '/path/to/file'...
于 2013-03-07T13:32:07.647 回答