【问题标题】:PostgreSQL - CSV file import errorPostgreSQL - CSV 文件导入错误
【发布时间】:2013-02-22 08:45:32
【问题描述】:

我正在尝试将 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 列。为什么这样做?还是我做错了什么?

【问题讨论】:

  • 您也有一些未加引号的字符串。这只是创建问题时的错字,还是在实际数据中?
  • 如果丹尼尔在下面的回答没有帮助,请发布\d project_task 的结果,因为这将显示列的顺序。我还建议摆脱DELIMITER ',',因为您还指定了CSV(因此它是默认值)
  • @Tim 这个 CSV 文件是使用另一个 PostgreSQL 数据库创建的,不知道为什么它的一个字符串带有引号,另一个没有。

标签: postgresql csv postgresql-9.2


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多