Подтвердить что ты не робот

Как сделать Postgres Copy игнорировать первую строку большого файла txt

У меня есть довольно большой файл .txt ~ 9gb, и я хочу загрузить этот файл txt в postgres. Первая строка - это заголовок, за которым следуют все данные. Если я опубликую COPY непосредственно данные, заголовок вызовет ошибку, которая не соответствует типу данных моей таблицы postgres, поэтому мне нужно будет как-то удалить ее.

Пример данных:   ProjectID, MailId, MailCodeId, prospectid, listid, datemailed, количество, пожертвованы, застежка-молния, zip4, VectorMajor, VectorMinor, PackageID, фаза, DatabaseID, количество2

15,53568419,89734,219906,15,2011-05-11 00:00:00,0,0,90720,2915,NonProfit,POLICY,230,3,1,0

16,84141863,87936,164657,243,2011-03-10 00:00:00,0,0,48362,2523,NonProfit,POLICY,1507,5,1,0

16,81442028,86632,15181625,243,2011-01-19 00:00:00,0,0,11501,2115,NonProfit,POLICY,1508,2,1,0

В то время как функция COPY для postgres имеет параметр "заголовок", который может игнорировать первую строку, он работает только для файлов csv:

copy training from 'C:/testCSV.csv' DELIMITER ',' csv header;

когда я пытаюсь запустить код выше в моем txt файле, он получает сообщение об ошибке:

copy training from 'C:/testTXTFile.txt' DELIMITER ',' csv header
ERROR:  unquoted newline found in data
HINT:  Use quoted CSV field to represent newline.

Я попытался добавить атрибуты "quote" и "escape", но команда просто не работает для txt файла:

copy training from 'C:/testTXTFile.txt' DELIMITER ',' csv header quote as E'"'  escape as E'\\N';
ERROR:  COPY escape must be a single one-byte character

В качестве альтернативы, я думал о запуске java или создании отдельной таблицы разбивки, чтобы удалить первую строку... но эти решения являются обширными и трудоемкими. Мне нужно будет загрузить 9gb данных, чтобы удалить первую строку заголовков... есть ли там другие решения, чтобы удалить первую строку файла txt, чтобы я мог загружать данные в мою базу данных postgres?

4b9b3361

Ответ 1

Используйте опцию HEADER с опцией CSV:

\copy <table_name>  from '/source_file.csv' delimiter ',' CSV HEADER ;

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