【问题标题】:Postgresql drops trailing zeroes when loading time with milliseconds from csv从 csv 加载时间以毫秒为单位时,Postgresql 删除尾随零
【发布时间】:2020-08-08 17:13:46
【问题描述】:

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

    Postgres 在这里没有做错任何事情。我花了一点时间才意识到问题出在数据上。

    .1.10 相等的。在数据中,时间戳被创造性地使用了,即在这种情况下.1表示“这一秒内的第一个记录”,.10表示“这一秒内的第10个记录”,所以毫秒部分从时间戳的角度来看没有意义观点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      相关资源
      最近更新 更多