Файл Postgresql COPY FROM с отметкой времени с часовым поясом – получение литерала искаженного массива

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

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

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"

person tim11g    schedule 26.04.2020    source источник


Ответы (1)


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

Изменив имя столбца на «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[] |           |          | 

Когда я воссоздал таблицу с «datetimestamp», столбец больше не является массивом:

                         Table "public.temperature"
      Column      |           Type           | Collation | Nullable | 
------------------+--------------------------+-----------+----------+--
 datetimestamp    | timestamp with time zone |           |          |     
person tim11g    schedule 26.04.2020
comment
Это не имеет ничего общего с изменением вашего имени, это определение типа. Когда формат определения типа — x[], это означает создание массива x. Таким образом, временная метка с часовым поясом, хотя это очень плохой выбор имен, синтаксически действительна. - person Belayer; 26.04.2020