У меня большой CSV-файл со всеми столбцами, указанными с "
. Нулевые значения представлены как ""
, а разделитель столбцов - |
. Я хотел бы использовать команду COPY
из postgresql (версия 10.7) для загрузки этих файлов. Я пробовал много комбинаций, но более естественным для меня является следующее:
COPY test.large
FROM '/path/to/big.file'
WITH (
FORMAT CSV,
HEADER,
DELIMITER '|',
QUOTE '"',
NULL ''
);
Моя базовая таблица ожидает столбец для целых чисел, и есть строки, где значение NULL
установлено на ...|""|...
вместокакой-то номер ...|"123456"|...
. И, к сожалению, это приводит к аварийному завершению COPY
, говоря:
ERREUR: syntaxe en entrée invalide pour l'entier : « »
CONTEXT: COPY regpat_pct_app_reg, ligne 2743, colonne appid : « »
Извините, по-французски из этого терминала. Во всяком случае, он говорит: Invalid syntax for integer : « »
В строке 2743 мы нашли:
...000205"|""|"XY...
Это значение NULL
, но я не могу найти, как правильно настроить COPY
переключатель команд, чтобы заставить postgresql принимать этифайлы.
Документация гласит:
NULL
Указывает строку, которая представляет нулевое значение. По умолчанию используется \ N (обратная косая черта-N) в текстовом формате и пустая строка без кавычек в формате CSV. Вы можете предпочесть пустую строку даже в текстовом формате для случаев, когда вы не хотите отличать пустые строки от пустых. Эта опция недопустима при использовании двоичного формата.
Мне известно, что я могу очистить файл, изменив ...|""|...
на ...||...
, используя sed
или некоторые операции регулярного выражения / замены. Это решит мою проблему, я проверил ее.
Что мне интересно: можно ли перенести это с postgresql, после всего этого это совершенно правильный формат CSV.
Обновление
Чтение следующего поста в соответствии с предложением, я написал:
COPY test.large
FROM '/path/to/big.file'
WITH (
FORMAT CSV,
HEADER,
DELIMITER '|',
QUOTE '"',
NULL '',
FORCE_NULL appid
);
Я получаю:
ERREUR: l'argument de l'option « force_null » doit être une liste de noms de colonnes
Что означает force_null must be a list of column names
. Есть идеи?