2012-10-12 31 views
9

Tôi có tập tin csv có nội dung như thế này:Lệnh COPY chính xác để tải dữ liệu postgreSQL từ tệp csv có dữ liệu được trích dẫn một lần?

10,53073,0,0,'Y','2008-05-30 21:46:55',0,'2008-05-30 21:48:04',0,53071,2 

Tôi muốn tải dữ liệu csv vào my_table.

CREATE TABLE my_table 
(
    ad_tree_id numeric(10,0) NOT NULL, 
    node_id numeric(10,0) NOT NULL, 
    ad_client_id numeric(10,0) NOT NULL, 
    ad_org_id numeric(10,0) NOT NULL, 
    isactive character(1) NOT NULL DEFAULT 'Y'::bpchar, 
    created timestamp without time zone NOT NULL DEFAULT now(), 
    createdby numeric(10,0) NOT NULL, 
    updated timestamp without time zone NOT NULL DEFAULT now(), 
    updatedby numeric(10,0) NOT NULL, 
    parent_id numeric(10,0), 
    seqno numeric(10,0), 
    CONSTRAINT ad_treenodemm_pkey PRIMARY KEY (ad_tree_id , node_id), 
    CONSTRAINT adtree_adtreenodemm FOREIGN KEY (ad_tree_id) 
     REFERENCES ad_tree (ad_tree_id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, 
    CONSTRAINT ad_treenodemm_isactive_check CHECK (isactive = ANY (ARRAY['Y'::bpchar, 'N'::bpchar])) 
) 

Khi tôi chạy lệnh này trong pgAdmin III công cụ:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV; 

tôi đã nhận lỗi:

ERROR: value too long for type character(1) 
CONTEXT: COPY my_table, line 1, column isactive: "'Y'" 

Sau đó, tôi sửa đổi lệnh như thế này:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '''; 
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\''; 
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\'' ESCAPE '\'; 
COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE '\'' ESCAPE \; 

Tất cả đều thất bại khi thử.

Vì vậy, bất kỳ ai cũng có thể hiển thị cho tôi lệnh COPY chính xác cho trường hợp này?

Trả lời

20

đúp dấu nháy đơn (nếu standard_conforming_strings được bật, thấy the docs)

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE ''''; 

hoặc sử dụng không đúng tiêu chuẩn PostgreSQL cụ thể escape string:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE E'\''; 
+0

+1 Ah! lam tôt lăm. – Meem

+1

Nếu COPY được dành riêng cho người dùng quản trị, từ việc sử dụng dòng lệnh psql, \ COPY my_table FROM 'c: \ downloads \ file.csv' DELIMITERS ',' CSV QUOTE '' ''; – Tammy

+0

@Tammy '\ copy' là các đường dẫn liên quan đến trình khách' psql', 'COPY' nhận chúng tương đối với máy chủ lưu trữ. –

1

Đừng bận tâm, tôi nhận được câu trả lời:

COPY my_table FROM 'c:\downloads\file.csv' DELIMITERS ',' CSV QUOTE ''''; 
2

Một số người khác đang gặp phải điều này ror có thể muốn kiểm tra tệp để xem tệp có chứa tiêu đề trên dòng đầu tiên hay không. Mặc dù không phải là vấn đề trong trường hợp của bạn, nhưng cần lưu ý cách làm việc xung quanh nó:

COPY my_table FROM 'c:\downloads\file.csv' WITH DELIMITER ',' CSV HEADER; 
Các vấn đề liên quan