#postgresql #csv
#postgresql #csv
Вопрос:
Моя таблица выглядит так:
CREATE TABLE IF NOT EXISTS metering.service_point (
service_point_id int GENERATED ALWAYS AS IDENTITY NOT NULL PRIMARY KEY,
service_point_number varchar (20) NULL,
property_id int NULL,
fuel_type char (1) NULL,
ldz_id smallint NULL,
gsp_id smallint NULL,
supply_start_date timestamp NULL,
supply_end_date timestamp NULL);
Я вставляю данные из CSV, которые выглядят следующим образом:
service_point_number, property_id, fuel_type, gsp_id, ldz_id, supply_start_date
'1717209598220',1,'E',8,,'20180428'
Используя эту команду:
COPY metering.service_point (service_point_number, property_id, fuel_type, gsp_id, ldz_id, supply_start_date)
FROM 'C:BillingDataservice_point.csv'
DELIMITER ','
CSV HEADER;
Это четвертая таблица в процессе пакетной загрузки, и первые три прошли нормально. Этот сбой с: value too long for type character(1)
Однако, если я скопирую содержимое НЕПОСРЕДСТВЕННО из CSV и вставлю его в INSERT
запрос, например:
INSERT INTO metering.service_point (service_point_number, property_id, fuel_type, gsp_id, ldz_id, supply_start_date)
SELECT '1717209598220',1,'E',8,NULL,'20180428';
Тогда все работает нормально.
Я предполагаю, что это должно быть ошибкой. Я могу обойти это, установив значение равным NULL, а затем исправив его позже. Я также могу обойти проблему, изменив тип данных для fuel_type
, но это кажется немного грустным.
Наверное, я просто упускаю что-то простое, может быть, что-то связанное с юникодом — например E
, в моем CSV на самом деле считается 2 символа по какой-то странной причине?
Комментарии:
1. Я только что просмотрел это, и я уверен, что кто-то поймет
,,
, что проблема в том, что это не так, это работает какNULL
, и я попробовал это со значением там, и оно все равно не сработало2. Почему вы используете одинарные кавычки вокруг значений? По умолчанию используются двойные кавычки, как описано здесь: postgresql.org/docs/current/sql-copy.html
3. Да, это сработало. Я думал, что одинарные и двойные кавычки взаимозаменяемы, и действительно, они отлично работали для моих первых двух файлов. Теперь я знаю лучше — спасибо!
4. Кроме того, единственное место, где я вижу двойные кавычки, упомянутые в этой документации, — это пустое строковое значение. Не стесняйтесь говорить мне, что я ошибаюсь 😉
5. ЦИТАТА «ЦИТАТА Указывает символ, заключающий в кавычки, который будет использоваться при цитировании значения данных. По умолчанию используется двойная кавычка. Это должен быть один однобайтовый символ. Эта опция разрешена только при использовании формата CSV. »