Как импортировать таблицы с отсутствующими значениями?

Я использую таблицы баскетбольных данных, чтобы получить некоторое представление о Postgres 9.2 и phppgadmin. Поэтому я хотел бы импортировать таблицы csv в эту базу данных. Однако я получаю:

ERROR:  missing data for column "year"
CONTEXT:  COPY coaches, line 1: ""coachid";"year";"yr_order";"firstname";"lastname";"season_win";"season_loss";"playoff_win";"playoff..."

с командой:

\copy coaches FROM '/Users/Desktop/Database/NBAPostGres/DataOriginal/coaches_data.csv' DELIMITER ',' CSV;

Текущая таблица не имеет отсутствующих. Итак, мои вопросы:

  1. Что я сделал не так, и если использовать таблицу с пропущенными значениями?

  2. Как импортировать такую ​​таблицу или обрабатывать такую ​​структуру в целом (также в отношении отсутствующих значений)?

Структура данных:

 coachid    year    yr_order    firstname   lastname    season_win
 HAMBLFR01  204        2          Frank     Hamblen         10
 RUSSEJO01  1946       1          John      Russell         22

Я использовал:

 varchar     integer   integer  character    character     integer

person Community    schedule 31.08.2014    source источник
comment
Во-первых: вы выбрали неправильный разделитель (сообщение об ошибке сообщает, что во входных данных есть ';', а ваша команда указала DELIMITER ',' И, поскольку она не может найти разделитель , в строке, команда копирования предполагает, что вся строка состоит из одного поля, и задыхается, когда не находит второй (год) столбец.   -  person wildplasser    schedule 31.08.2014
comment
СПАСИБО. Я настроил его, но получаю ОШИБКУ: недопустимый синтаксис ввода для целого числа: год КОНТЕКСТ: КОПИРОВАТЬ тренеров, строка 1, столбец год: год. Возможно ли, что я должен как-то учитывать заголовок? (year, coachid не являются целыми числами по понятным причинам, поэтому либо я меняю тип данных, либо подразумеваю заголовок в команде. Имеет ли это смысл?)   -  person    schedule 31.08.2014
comment
Вы должны учитывать заголовок или удалить строку из источника.   -  person Erwin Brandstetter    schedule 31.08.2014
comment
да, я понял, спасибо, ребята :---)..... может кто-нибудь рассказать мне немного о том, как обычно обрабатываются пропущенные значения в этом контексте. Должен ли я как-то учитывать их перед импортом данных с отсутствующими значениями?   -  person    schedule 31.08.2014


Ответы (2)


У вас могут отсутствовать столбцы для всей таблицы. Сообщите COPY (или оболочке psql \copy) заполнять только эти столбцы, добавляя список столбцов в таблицу, например:

\copy coaches (coachid, yr_order, firstname)
FROM '/Users/.../coaches_data.csv' (FORMAT csv, HEADER, DELIMITER ',');

Отсутствующие значения заполняются значениями столбца по умолчанию. Согласно документации:

Если в таблице есть какие-либо столбцы, которых нет в списке столбцов, COPY FROM вставит значения по умолчанию для этих столбцов.

Но у вас не может отсутствовать значения для некоторых строк. Это невозможно. Можно использовать текстовое представление NULL (отменяя значения по умолчанию для соответствующих столбцов).

Собственно все есть в инструкции:

person Erwin Brandstetter    schedule 31.08.2014
comment
У меня такая же проблема. Я попробовал это решение, выдает мне эту ошибку: ОШИБКА: дополнительные данные после последнего ожидаемого столбца - person Ramin Zahedi; 24.12.2016
comment
@RaminZahedi: у вас должен быть целевой столбец для каждого столбца в CSV-файле. И файл должен быть последовательным, конечно. - person Erwin Brandstetter; 24.12.2016

ОШИБКА: отсутствуют данные для столбца "год" КОНТЕКСТ: КОПИРОВАТЬ тренеров, строка 1: ""тренер";"год";"год_порядок";"имя";"фамилия";"сезон_победа";"сезон_поражение";"плей-офф_победа"; "плей-офф..."

Этот тип ошибки также является результатом несоответствия таблицы. Таблица, в которую вы импортируете текстовый файл, имеет больше или меньше столбцов, чем в текстовом файле.

person Timal Mangra    schedule 16.12.2015