2012-08-02 9 views
21

Ho un file .txt abbastanza grande ~ 9 gb e mi piacerebbe caricare questo file txt in postgres. La prima riga è l'intestazione, seguita da tutti i dati. Se postgres COPY i dati direttamente, l'intestazione causerà un errore che il tipo di dati non corrisponde alla mia tabella postgres, quindi dovrò rimuoverlo in qualche modo.Come fare Postgres Copy ignora la prima riga del file txt grande

campione di dati: ProjectID, MailId, MailCodeId, prospectid, listid, datemailed, importo, donato, zip, zip4, VectorMajor, VectorMinor, PackageID, fase, 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 

Mentre la funzione COPY per Postgres ha l'impostazione "header" in grado di ignorare la prima fila, funziona solo per i file CSV:

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

quando si tenta di eseguire il codice di cui sopra sul mio file txt, si ottiene un errore:

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

Ho provato ad aggiungere "quote" e "escape" attributi, ma il comando semplicemente non sembra funzionare per il file 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 

In alternativa, ho pensato di correre java o creare uno stagging separato tabella per rimuovere la prima riga ... ma queste soluzioni sono lunghe e costose. Dovrò caricare 9gb di dati solo per rimuovere la prima riga di intestazioni ... ci sono altre soluzioni là fuori per rimuovere facilmente la prima riga di un file txt in modo che possa caricare i dati nel mio database postgres?

+2

L'opzione _header_ non rimuovere la prima riga, nessuna utilità esterno è necessario per questo. Se questo porta a "una nuova riga non quotata trovata nei dati", solleva una domanda: qual è esattamente la struttura del tuo file? In che cosa differisce da [CSV] (http://en.wikipedia.org/wiki/Comma-separated_values)? –

risposta

38

opzione Usa HEADER opzione CSV con:

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

Mi dispiace, il mio errore, l'intestazione CSV funziona. I dati nel mio file txt in realtà avevano un formato diverso dal mio file CSV che ha provocato l'errore. – thiakx

Problemi correlati