当从csv中用毫秒加载时间时,Postgresql会丢掉尾部的零。

问题描述 投票:0回答:1

我正在将一个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位数精度,没有区别。

谢谢!

postgresql csv time primary-key trailing
1个回答
0
投票

Postgres在这里没有做错什么。我才意识到问题出在数据上。

.1.10 等。在数据中,创造性地使用了时间戳,即在本案例中 .1 指 "本秒内第1项记录 "和 .10 意思是 "这一秒内的第10条记录",所以从时间戳的角度来看,毫秒的成分没有意义。

© www.soinside.com 2019 - 2024. All rights reserved.