我正在将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
答案 0 :(得分:1)
在此处剪切和粘贴表格定义和示例数据可显示一切正常。
所以 - 您的表定义或文件不是您认为的那样。如果表列的顺序不同,则可以在COPY命令中指定列。
如果文件不同,它可能是肉眼看不到的东西,或者你会在询问之前发现它。我不认为这个文件有机会来自Windows机器吗?
要检查的三件事:
尝试剪切+粘贴样本数据并查看是否导入。如果是这样,请尝试在文本编辑器中打开您的真实文件并重新保存。如果这样可以解决问题,请获取十六进制编辑器并查看示例文件中的实际字节。