Импорт данных CSV с табулированием разделителей в PostgreSQL - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть CSV-файл с такими данными, как "44444 521 привет".Сценарии здесь - «Табуляции».

Я хочу импортировать данные CSV в таблицу с именем «TEST1», поэтому я сделал это:

\copy TEST(attribut1,attribut2,attribut3) FROM '/mnt/c/Users/user1/Desktop/data/test1.csv' WITH DELIMITER E'\t' CSV HEADER;

attribut1 = integer.attribut2 = целое число.attribut3 = varchar (20).

И он сказал:

ОШИБКА: неверный синтаксис ввода для целого числа: "44444 521 привет" КОНТЕКСТ: COPY test1, строка 2, столбец attribut1:"4444444 521 привет"

Спасибо за ваше время.

РЕДАКТИРОВАТЬ :

Вот скриншот файла в шестнадцатеричном редакторе: enter image description here

1 Ответ

0 голосов
/ 07 декабря 2018

Проблема возникает из-за того, что вы указываете CSV, который активирует правила импорта postgres csv.Ваш файл не рассматривается как разделенный табуляцией;в начале и конце каждой строки есть " кавычки, которые в режиме CSV означают «начало данных» / «конец данных», поэтому каждая строка обрабатывается как одно поле, вкладки внутри обрабатываются как данные, а не какразделители

Либо импортируйте его в текстовом режиме (не указывайте CSV), либо импортируйте его в режиме CSV, но укажите другой символ кавычки (символ, которого нет в файле, 1), чтобы остановить " трактуется как кавычка и 2) поэтому ни один другой символ не может рассматриваться как цитата)

В любом случае вам придется убрать кавычку " вычисляет пост-процесс - я не думаю, что вы можетеманипулируйте данными на лету, когда они копируются, поэтому вам придется сначала загрузить их в промежуточную таблицу (все varchar), затем удалить кавычки и загрузить их в реальную таблицу (REPLACE(data, '"', '')::int)

Или вы можете текстовый редактор вашего файла и удалить символы " из него, прежде чем передать его в postgres

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...