Postgresql COPY FROM файл с «меткой времени с часовым поясом» - получение «литерала некорректного массива» - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть таблица со столбцом типа «отметка времени с часовым поясом»

Я импортирую данные из файла с помощью этой команды

db=# COPY "temperature"  FROM 'd:\data\PostgresImport\TEMPLOG.CSV' DELIMITER ',' CSV;

Я получаю эту ошибку

ERROR:  malformed array literal: "2009-01-05 18:40:00 z"
DETAIL:  Array value must start with "{" or dimension information.
CONTEXT:  COPY temperature, line 1, column timestamp: "2009-01-05 18:40:00 z"

Я попытался переформатировать исходные данные, чтобы показать часовой пояс как +0000, но я все еще получаю ту же ошибку:

ERROR:  malformed array literal: "2009-01-05 18:40:00+0000"
DETAIL:  Array value must start with "{" or dimension information.
CONTEXT:  COPY temperature, line 1, column timestamp: "2009-01-05 18:40:00+0000"

1 Ответ

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

Имя столбца не может быть «отметкой времени» - очевидно, это зарезервированное слово. Вместо того, чтобы отмечать его как зарезервированный при создании таблицы, он вызывает странные ошибки, подобные этой, при импорте данных.

При изменении имени столбца на «datetimestamp» команда COPY FROM работает отлично. (с использованием отметки времени в формате «2009-01-05 18: 40: 00 + 0000»)

db=# COPY "temperature"  FROM 'd:\data\PostgresImport\TEMPLOG.CSV' DELIMITER ',' CSV;
COPY 595896
db=#

Примечание: при создании таблицы со столбцом «отметка времени», видимо, был создан тип в виде массива:

                    Table "public.temperature"
     Column      |            Type            | Collation | Nullable |
-----------------+----------------------------+-----------+----------+
timestamp        | timestamp with time zone[] |           |          | 

Когда я воссоздал таблицу с меткой "дата-время", столбец больше не был массивом:

                         Table "public.temperature"
      Column      |           Type           | Collation | Nullable | 
------------------+--------------------------+-----------+----------+--
 datetimestamp    | timestamp with time zone |           |          |     
...