我正在将一个csv文件导入Postgres表。该文件的格式如下。
2019/12/13, 14:56:02, 3172.50, 3174.25, 3172.50, 3172.50, 1, 1, 1, 0
这个表被定义为:
CREATE TABLE tablename (
date date,
time time,
v1 numeric,
v2 numeric,
v3 numeric,
v4 numeric,
v5 integer,
v6 integer,
v6 integer,
v7 integer,
PRIMARY KEY(date, time)
);
有一个问题是 time
字段。在某些情况下,为了精确性,会添加毫秒。
14:56:02.1
14:56:02.9
14:56:02.10
不幸的是,Postgres似乎放弃了尾部的零,这导致它将两个以下的值标记为重复。
14:56:02.1
14:56:02.10
ERROR: duplicate key value violates unique constraint "tablename_pkey"
DETAIL: Key (date, "time")=(2019-12-13, 14:56:02.1) already exists.
CONTEXT: COPY input_file, line 1584
有没有办法让psql不丢掉尾部的零?我试过用time(4)来强制执行4位数精度,没有区别。
谢谢!
Postgres在这里没有做错什么。我才意识到问题出在数据上。
.1
而 .10
是 等。在数据中,创造性地使用了时间戳,即在本案例中 .1
指 "本秒内第1项记录 "和 .10
意思是 "这一秒内的第10条记录",所以从时间戳的角度来看,毫秒的成分没有意义。