当从 csv 以毫秒为单位加载时间时,Postgresql 会丢弃尾随零
Postgresql drops trailing zeroes when loading time with milliseconds from csv
我正在将一个 csv 文件导入 Postgres Table。该文件具有以下格式:
2019/12/13, 14:56:02, 3172.50, 3174.25, 3172.50, 3172.50, 1, 1, 1, 0
table定义为:
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条记录”,所以毫秒分量没有从时间戳的角度来理解。
我正在将一个 csv 文件导入 Postgres Table。该文件具有以下格式:
2019/12/13, 14:56:02, 3172.50, 3174.25, 3172.50, 3172.50, 1, 1, 1, 0
table定义为:
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条记录”,所以毫秒分量没有从时间戳的角度来理解。