1

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

这是我COPY在 psql CLI 调用命令时的 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

4

1 回答 1

1

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

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

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

需要检查的三件事:

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

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

于 2012-06-28T10:56:42.787 回答