【问题标题】:PostgreSQL bulk import from CSV failing. ERROR: invalid input syntax for integer: "1990-01-02"从 CSV 批量导入 PostgreSQL 失败。错误:整数的无效输入语法:“1990-01-02”
【发布时间】:2012-06-29 20:20:19
【问题描述】:

我正在将数据从 CSV 文件导入到 postgreSQL 表中。

表格如下所示:

CREATE TABLE foo_stats (
                        td                      DATE NOT NULL,
                        ins_id                  INTEGER CHECK (ins_id > 0) NOT NULL,
                        df_id                   INTEGER CHECK (df_id > 0) NOT NULL,
                        pc                      REAL NOT NULL DEFAULT 0.0,
                        ph                      REAL DEFAULT 0.0 NOT NULL,
                        pl                      REAL DEFAULT 0.0 NOT NULL,
                        av                      REAL DEFAULT 0.0 NOT NULL,
                        cv                      BIGINT DEFAULT 0 NOT NULL,
                        avi                     REAL DEFAULT 0.0 NOT NULL,
                        cmi                     BIGINT DEFAULT 0 NOT NULL,
                        vwp                     REAL CHECK (vwp >= 0) NOT NULL,
                        atr                     REAL NOT NULL DEFAULT -99999,
                        pv                      REAL NOT NULL DEFAULT -99999,
                        pr                      REAL NOT NULL DEFAULT -99999,

                        PRIMARY KEY                     (ins_id, df_id, td)
                        );

在批量复制之前,我使用 ALTER TABLE DROP CONSTRAINT PRIMARY KEY 删除主键

这是我在 psql CLI 调用 COPY 命令时的 CL 跟踪:

mydb=# COPY foo_stats FROM '/path/to/data/foo_stats.csv' WITH CSV;
ERROR:  invalid input syntax for integer: "1990-01-02"
CONTEXT:  COPY foo_stats, line 1, column id: "1990-01-02"
mydb=# 

输入 CSV 文件的前几行如下所示:

"1990-01-02",388,3,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,4,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,1,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,7,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999
"1990-01-02",388,6,-99999,0.913,0.91,0.0,0,0.0,0,0,-99999,-99999,-99999

输入文件中的数据列与表模式中的顺序相同。谁能解释为什么我会收到错误消息?

PS:我在 Ubuntu 10.0.4 LTS 上使用 PostgreSQL 8.4

【问题讨论】:

  • 这里缺少一些东西。我刚刚使用您的定义创建了一个表,将示例数据复制到文件中并使用 COPY foo_stats FROM 'c:\tmp\foo_stats.csv' WITH CSV; 将其导入 - 一切正常!

标签: postgresql csv data-import


【解决方案1】:

在此处剪切和粘贴您的表定义和示例数据显示一切正常。

所以 - 您的表定义或文件都不是您认为的那样。如果您的表格列的顺序不同,您可以在 COPY 命令中指定列。

如果文件不同,则可能是肉眼看不到的东西,或者您会在询问之前发现它。我不认为这个文件有任何机会来自 Windows 机器?

要检查的三件事:

  1. 文件开头的不必要的字节顺序标记 (BOM)
  2. \r\n 而不是 \n 的行尾
  3. 任何其他控制代码

尝试剪切 + 粘贴您的示例数据,看看是否可以导入。如果是这样,请尝试在文本编辑器中打开您的真实文件并重新保存。如果这样可以解决问题,请使用十六进制编辑器并查看示例文件中的实际字节。

【讨论】:

  • 感谢提请我注意这种可能性。事实证明,我的数据库架构在之前的测试期间已经在数据库中更改,并且与我的预期不同。现已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
相关资源
最近更新 更多