У меня есть данные в формате 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
Мои вопросы:
Есть ли способ изменить формат выходной даты в команде COPY FROM?
Как правильно обновлять большие postgres таблицы ежедневными кавычками из CSV-файлов оптом с помощью команд sql?
Моя postgres версия: psql (PostgreSQL) 11,7
Редактировать:
Это не psql копировать вопрос.