PostgreSQL — ошибка импорта файла CSV

Я пытаюсь импортировать CSV-файл в таблицу PostgreSQL (9.2). Я получаю сообщение об ошибке, что одно значение столбца имеет неправильный синтаксис ввода, но кажется, что PostgreSQL не соответствует столбцам и их значениям.

Я импортирую CSV с помощью этой команды:

\copy project_task from '/home/user/downloads/project_task_export.csv' WITH DELIMITER ',' CSV HEADER

Ошибка выглядит так:

ERROR:  invalid input syntax for integer: "4.25"
CONTEXT:  COPY project_task, line 3, column sequence: "4.25"

Мои данные csv выглядят так:

id,create_uid,create_date,write_date,write_uid,remaining_hours,date_start,description,sequence,date_end,active,planned_hours,partner_id,delay_hours,user_id,name,date_deadline,notes,type_id,company_id,priority,total_hours,state,progress,user_group_id,project_id,effective_hours,context_id,timebox_id
185,8,2012-06-05 09:51:09.562849,2012-09-10 08:52:05.789792,26,4.25,2012-06-19 15:54:07,"asdcxzzsrt ab cdefgqwer tyuipok asmmdmksa kmsaaqqwerr.
",10,,t,12,,0.0,6,byrteqwas oeirklm askeiurjqqpl,,,,1,2,12.0,open,64.579999999999998,,9,7.75,1,4

Если вы внимательно изучили эти данные CSV и обнаружили ошибку, последовательность столбцов — это 9-й столбец, а показанная ошибка выглядит так, как будто PostgreSQL использует значение 6-го столбца для девяти столбцов. Почему оно это делает? Или может я что-то не так делаю?


person Andrius    schedule 07.03.2013    source источник
comment
У вас тоже есть строки без кавычек. Это просто опечатка при создании вопроса или в фактических данных?   -  person Tim    schedule 07.03.2013
comment
Если приведенный ниже ответ Даниэля не помогает, опубликуйте результаты \d project_task, так как это покажет порядок столбцов. Я также предлагаю избавиться от DELIMITER ',', так как вы также указываете CSV (и, следовательно, по умолчанию)   -  person Chris Travers    schedule 07.03.2013
comment
@Tim Этот CSV-файл был создан с использованием другой базы данных PostgreSQL, не знаю, почему он сделал одну строку с кавычками, а другую без.   -  person Andrius    schedule 08.03.2013


Ответы (1)


Предположительно проблема в том, что порядок столбцов в CSV-файле не соответствует порядку в целевой таблице. Можно подумать, что COPY сопоставляет столбцы в соответствии с заголовком в первой строке, но на самом деле первая строка игнорируется, как сказано в этом выдержка из документа:

HEADER
Указывает, что файл содержит строку заголовка с именами каждого столбца в файле. На выходе первая строка содержит имена столбцов из таблицы, а на входе первая строка игнорируется. Этот параметр разрешен только при использовании формата CSV.

Вам нужно добавить в \copy список столбцов в круглых скобках после имени таблицы, упорядоченный как в файле:

\copy project_task(id,create_uid,.....,context_id,timebox_id) from '/path/to/file'...
person Daniel Vérité    schedule 07.03.2013