2012-08-02 6 views
21

Ich habe eine ziemlich große TXT-Datei ~ 9GB und ich möchte diese TXT-Datei in Postgres laden. Die erste Zeile ist die Kopfzeile, gefolgt von allen Daten. Wenn ich die Daten direkt kopiere, erzeugt die Kopfzeile einen Fehler, dass der Datentyp nicht mit meiner postgres-Tabelle übereinstimmt, daher muss ich sie irgendwie entfernen.So machen Sie Postgres Copy ignorieren erste Zeile der großen TXT-Datei

Beispieldaten: projectID, mailid, MailCodeId, prospectid, listid, datemailed, Menge, gespendet, 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 

Während die COPY-Funktion für postgres die „Header“ Einstellung hat, die die erste Zeile ignorieren kann, es funktioniert nur für cSV-Dateien:

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

wenn ich versuche, den Code oben auf meiner txt-Datei auszuführen, wird es einen Fehler:

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

ich versucht habe, den Zusatz „Zitat“ und „Escape“ Attribute, aber der Befehl scheint nicht nur für TXT-Datei zu arbeiten:

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 

Alternativ dachte ich über Java laufen oder eine separate stagging erstellen Tabelle, um die erste Zeile zu entfernen ... aber diese Lösungen sind expansiv und zeitaufwendig. Ich muss 9gb Daten nur laden, um die erste Reihe der Überschriften zu entfernen ... gibt es andere Lösungen da draußen, um die erste Reihe einer txt Datei leicht zu entfernen, damit ich die Daten in meine Postgres Datenbank laden kann?

+2

Die _header_ Option, um die erste Zeile nicht entfernt, kein externes Dienstprogramm für das benötigt wird. Wenn das zu "unquoteed newline found in data" führt, stellt sich die Frage: Was ist genau die Struktur Ihrer Datei? Wie unterscheidet es sich von [CSV] (http://en.wikipedia.org/wiki/Comma-separated_values)? –

Antwort

38

Verwenden HEADER Option mit CSV-Option:

WITH CSV HEADER DELIMITER AS ',' 

HEADER Specifies that the file contains a header line with the names of each column in the file. On output, the first line contains the column names from the table, and on input, the first line is ignored. This option is allowed only when using CSV format.

+0

Entschuldigung, mein Fehler, CSV Header funktioniert. Die Daten in meiner TXT-Datei hatten ein anderes Format als meine CSV-Datei, die zu dem Fehler führte. – thiakx

Verwandte Themen