2012-08-02 38 views
21

Tôi có một tệp .txt khá lớn ~ 9gb và tôi sẽ muốn tải tệp txt này vào postgres. Hàng đầu tiên là tiêu đề, theo sau là tất cả dữ liệu. Nếu tôi postgres COPY dữ liệu trực tiếp, tiêu đề sẽ gây ra một lỗi mà kiểu dữ liệu không phù hợp với bảng postgres của tôi, vì vậy tôi sẽ cần phải loại bỏ nó bằng cách nào đó.Làm thế nào để sao chép Postgres bỏ qua dòng đầu tiên của tệp txt lớn

mẫu dữ liệu: ProjectId, MailId, MailCodeId, prospectid, listid, datemailed, số tiền, tặng, zip, zip4, VectorMajor, VectorMinor, packageid, giai đoạn, 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 

Trong khi chức năng COPY cho postgres có tiêu đề "" cài đặt mà có thể bỏ qua những dòng đầu tiên, nó chỉ hoạt động cho các tập tin csv:

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

khi tôi cố gắng chạy mã ở trên vào file txt của tôi, nó được một lỗi:

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. 

Tôi đã cố gắng thêm "quote" và "thoát" thuộc tính nhưng lệnh chỉ sẽ không có vẻ làm việc cho tập tin 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 

Ngoài ra, tôi nghĩ về việc chạy java hoặc tạo một stagging riêng biệt để loại bỏ hàng đầu tiên ... nhưng các giải pháp này mở rộng và tốn thời gian. Tôi sẽ cần phải tải 9gb dữ liệu chỉ để loại bỏ hàng đầu tiên của tiêu đề ... là có giải pháp khác ra khỏi đó để loại bỏ hàng đầu tiên của một tập tin txt dễ dàng để tôi có thể tải dữ liệu vào cơ sở dữ liệu postgres của tôi?

+2

Tùy chọn _header_ không loại bỏ dòng đầu tiên, không có tiện ích bên ngoài là cần thiết cho điều đó. Nếu điều đó dẫn đến "dòng mới chưa được kiểm tra được tìm thấy trong dữ liệu", nó đặt ra một câu hỏi: chính xác cấu trúc của tệp của bạn là gì? Nó khác với [CSV] (http://en.wikipedia.org/wiki/Comma-separated_values) như thế nào? –

Trả lời

38

Sử dụng HEADER tùy chọn với tùy chọn CSV:

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

Xin lỗi, tiêu đề CSV của tôi không hoạt động. Dữ liệu trong tệp txt của tôi thực sự có định dạng khác với tệp csv của tôi dẫn đến lỗi. – thiakx

Các vấn đề liên quan