从CSV失败的PostgreSQL批量导入。错误:整数的输入语法无效:“1990-01-02”

时间:2012-06-28 10:19:15

标签: postgresql csv data-import

我正在将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

1 个答案:

答案 0 :(得分:1)

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

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

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

要检查的三件事:

  1. 文件开头不必要的字节顺序标记(BOM)
  2. \ r \ n而不是\ n
  3. 的行结尾
  4. 任何其他控制代码
  5. 尝试剪切+粘贴样本数据并查看是否导入。如果是这样,请尝试在文本编辑器中打开您的真实文件并重新保存。如果这样可以解决问题,请获取十六进制编辑器并查看示例文件中的实际字节。