Скопировать файл из CSV в таблицу Postgresql - проблема с отметкой времени - PullRequest
2 голосов
/ 20 марта 2020

У меня есть данные в формате csv со строками ежедневных котировок акций компании, которые выглядят следующим образом:

INTSW2027243,20200319,7.7700,7.7800,7.3600,7.3600,2442
INTSW2027391,20200319,7.4200,7.6000,6.8300,6.8900,15262
INTSW2027409,20200319,7.4800,7.5600,7.4200,7.5600,743
INTSW2028365,20200319,0.7100,0.7200,0.5400,0.5500,47495 
Atari,20200319,351.0000,365.5000,350.0000,357.0000,9040

Второй столбец файла - это дата: в этом случае 2020-03-19.

Я использую команду COPY FROM для обновления таблицы postgres companies.

COPY companies (ticker, date, open, high, low, close, vol) FROM '/home/user/Downloads/company.csv' using delimiters ',' with null as '\null';

Всякий раз, когда я использую команду COPY FROM для копирования файла в postgresql таблица, моя дата «20200319» меняется на 1970-08-22 20:11:59, и я получаю последнюю запись, которая выглядит примерно так:

   id    | ticker |        date         | open | high  | low | close | vol  
---------+--------+---------------------+------+-------+-----+-------+------
 2248402 | Atari  | 1970-08-22 20:11:59 |  351 | 365.5 | 350 |   357 | 9040

Если я вручную обновлю таблицу компаний с помощью следующей команды я получаю правильные результаты:

INSERT INTO companies (ticker, date, open, high, low, close, vol) VALUES ('Atari', to_timestamp('20200319', 'YYYYMMDD')::timestamp without time zone ,351.0000,365.5000,350.0000,357.0000,9040);

Однако приведенное выше решение не работает, если данные хранятся в CSV-файле.

Правильно результат:

   id    | ticker |        date         | open | high  | low | close | vol  
---------+--------+---------------------+------+-------+-----+-------+------
 2250513 | Atari  | 2020-03-19 00:00:00 |  351 | 365.5 | 350 |   357 | 9040

Мои вопросы:

  1. Есть ли способ изменить формат выходной даты в команде COPY FROM?

  2. Как правильно обновлять большие postgres таблицы ежедневными кавычками из CSV-файлов оптом с помощью команд sql?

Моя postgres версия: psql (PostgreSQL) 11,7

Редактировать:

Это не psql копировать вопрос.

1 Ответ

1 голос
/ 20 марта 2020

Хорошо, я воспользовался советом из комментариев Madflow и частично из Abelisto и скорректировал мой стиль дат SET.

Сначала я связал: SET datestyle = 'YYYYMMDD'; (и многие другие его комбинации)

Но получал следующую ошибку: недопустимое значение для параметра «DateStyle»: «ГГГГММДД»

Затем я перешел к попытке: set datestyle to "YMD"; И получил: SET

Теперь, когда я пытаюсь: показать datestyle ;

Я получаю:

 DateStyle 
-----------
 ISO, YMD
(1 row)

И, когда я пытаюсь выполнить следующую команду:

   COPY companies (ticker, date, open, high, low, close, vol) FROM '/home/user/Downloads/company.csv' using delimiters ',' with null as '\null';

Похоже, я наконец-то получил правильный формат даты, поэтому не нужно настраивать команду COPY FROM:

   id    | ticker |        date         | open | high  | low | close |  vol  
---------+--------+---------------------+------+-------+-----+-------+-------
 1379256 | Atari  | 2020-03-16 00:00:00 |  294 | 337.5 | 256 |   337 | 48690
 1379257 | Atari  | 2020-03-17 00:00:00 |  347 |   381 | 338 |   357 | 36945
 1379258 | Atari  | 2020-03-18 00:00:00 |  364 |   380 | 350 |   357 | 19650
 2251920 | Atari  | 2020-03-19 00:00:00 |  351 | 365.5 | 350 |   357 |  9040

Итак, спасибо, ребята, за предложения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...