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

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

Пример данных :ProjectId,MailId,MailCodeId,prospectid,listid,datemailed,amount,donated,zip,zip4,VectorMajor,VectorMinor,packageid,phase,databaseid,amount2

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 или создании отдельной промежуточной таблицы для удаления первой строки... но эти решения являются дорогостоящими и требуют много времени. Мне нужно будет загрузить 9 ГБ данных только для того, чтобы удалить первую строку заголовков... существуют ли другие решения, позволяющие легко удалить первую строку txt-файла, чтобы я мог загрузить данные в свою базу данных postgres?

31
задан Willi Mentzel 21 March 2016 в 14:54
поделиться