Как я могу импортировать TIMESTAMP в POSTGRES без секунд?Исходя из большого CSV - PullRequest
0 голосов
/ 23 сентября 2019

Прошу прощения за вопрос новичка POSTGRES, я немного больше знаком с MSMSQL, но я, вероятно, тоже буду там бороться.

У меня есть CSV с приблизительно 12 миллионами строк, которые я пытаюсь импортировать.Одним из полей является поле даты в формате "ГГГГ-ММ-ДД ЧЧ: ММ" .

В моей таблице тип поля установлен на TIMESTAMP (это верно?).Ошибка импорта CSV: "ОШИБКА: значение поля даты / времени вне диапазона:" 2019-20-09 04:00 "" .

Как я могу импортировать этот тип строки даты?

Мои текущие заявления выглядят так:

CREATE TABLE WoSWeatherGrids
(
    id serial NOT NULL,
    Location NUMERIC(6),
    Date TIMESTAMP,
)

COPY WosWeatherGrids(Location,Date) 
FROM '\\location\Weathergrids.csv' DELIMITER ',' CSV HEADER;

Получена ошибка:

ERROR:  date/time field value out of range: "2019-20-09 04:00"
HINT:  Perhaps you need a different "datestyle" setting.
CONTEXT:  COPY wosweathergrids, line 2, column date: "2019-20-09 04:00"
SQL state: 22008

Я не могу изменить строки в CSV, так как это процесс, который запускается автоматически с выхода другого программного обеспечения, который, как мы надеемся, будет происходить пару раз в день.Я надеюсь, что есть простой метод, который можно выделить, чтобы позволить мне импортировать этот тип строки.

CSV Тип образца

Location,Date
1075,2019-20-09 04:00
1075,2019-20-09 05:00
1075,2019-20-09 06:00
1075,2019-20-09 07:00

РЕДАКТИРОВАТЬ: Проблема, похоже, связана с тем, что Postgres не нравится формат YDM DateStyle.Одна из оригинальных систем использует MS SQL, и T-SQL может справиться с этим.Я не могу изменить эту систему, поэтому мне все еще нужно разобраться с этой проблемой.

EDIT2: согласно документации здесь Я смог привести пример YYYY-DD-MM HH: тип даты SS к тому, что мне нужно, используя следующее,select to_char(to_timestamp('2019-20-09 04:00', 'YYYY-DD-MM HH24:MI'), 'HH24:MI DD/MM/YYYY');.Я все еще несколько застрял в том, что мне нужно либо понять, как сделать это из входных данных CSV, либо как создать временную таблицу, а затем создать правильную таблицу и привести ее на другую сторону.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

создать временный столбец (fec) и после обновления столбца даты, например:

CREATE  TABLE WoSWeatherGrids
 (
   id serial NOT NULL,
   Location NUMERIC(6),
   Date TIMESTAMP,
   fec text
 )

COPY WosWeatherGrids(Location,fec) 
FROM '/tmp/datos.csv' DELIMITER ',' CSV HEADER;

update WoSWeatherGrids set date = to_timestamp(fec,'YYYY-DD-MM HH:MI');

alter TABLE WoSWeatherGrids drop COLUMN fec;
1 голос
/ 23 сентября 2019

Вам нужно будет установить datestyle на ISO, DMY или подобное.Важной частью здесь является ISO, так как ваша временная метка (почти) в формате ISO.

...