При использовании psql для копирования из файла CSV, «» для пустого столбца генерирует ошибку вместо нулевого - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь использовать команду copy для копирования большого файла CSV в таблицу postgres.

Определенный целочисленный столбец в основном равен нулю. В файле csv этот столбец имеет только "".

Каждый столбец заключен в кавычки, что не является проблемой для других столбцов.

Я получаю эту ошибку, когда пытаюсь скопируйте его:

ERROR: invalid input syntax for integer: ""

Я попытался установить для условия NULL значение '' и "'в моем операторе копирования. '' ничего не делает, "" выдает ошибку:

zero-length delimited identifier at or near """"

Я пытался использовать sed, чтобы изменить все "" на "", но это все равно не работает, даже когда я установил Нулевое предложение для "". Я все еще получаю

ERROR: invalid input syntax for integer: " "

На данный момент я могу продолжить, уведя столбец в -1. В любом случае, мне не очень важен этот столб Я мог бы просто установить его на ноль или игнорировать его, но когда я попытался убрать его из раздела определения столбца команды копирования, postgres заорал на меня.

Так что мой вопрос сводится к следующему: как я могу сказать postgres обрабатывать "" как нулевое значение?

Спасибо.

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Типичный способ указать отсутствующее значение (ноль) в файле .csv - просто ничего не помещать в это поле. Например, если у вас есть три столбца (A, B и C) и нет значения для B, файл .csv будет содержать "Col A value",,"Col C value". "" является строковым значением, а не числовым значением c, поэтому его нельзя считать одним.

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

Это то, для чего предназначена опция force_null:

Сопоставить значения указанных столбцов с пустой строкой, даже если она была заключена в кавычки

Предполагая, что имя столбца int равно "y":

\copy foo from foo.csv with (format csv, force_null (y));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...