Postgresql сбрасывает конечные нули при загрузке в миллисекундах из CSV - PullRequest
0 голосов
/ 25 апреля 2020

Я импортирую файл 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 не сбрасывать конечные нули? Я пробовал время (4) для обеспечения точности 4 di git, без разницы.

Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2020

Postgres здесь не делает ничего плохого. Мне потребовалось время, чтобы понять, что проблема связана с форматом данных.

.1 и .10 равны . Данные должны быть очищены для правильного отображения миллисекунд, т.е. в этом случае .1, вероятно, означает «спустя 1 миллисекунду», а .10 означает «спустя 10 миллисекунд», поэтому фактические значения должны быть .001 и .010.

...