2012-10-12 6 views
9

मैं csv फ़ाइल इस तरह सामग्री है कि है:सीएसवी फ़ाइल से postgreSQL डेटा लोड करने के लिए सही COPY कमांड जिसमें एकल-उद्धृत डेटा है?

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

मैं My_table में csv डेटा लोड करना चाहते हैं।

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])) 
) 

जब मैं तृतीय उपकरण pgAdmin में इस कमांड चलाएँ:

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

मुझे मिल गया त्रुटि:

ERROR: value too long for type character(1) 
CONTEXT: COPY my_table, line 1, column isactive: "'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 \; 

कोशिश की जब सभी विफल रहे।

तो, कोई भी मुझे इस मामले के लिए सही COPY आदेश दिखा सकता है?

उत्तर

20

डबल सिंगल कोट्स (यदि standard_conforming_strings पर है, the docs देख)

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

या गैर मानक PostgreSQL विशेष escape string का उपयोग करें:

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

+1 आह! अच्छा काम। – Meem

+1

यदि सीपीवाईआई व्यवस्थापक उपयोगकर्ताओं के लिए आरक्षित है, तो psql कमांड लाइन उपयोग से, \ cOPY my_table से 'c: \ Downloads \ file.csv' DELIMITERS ',' CSV QUOTE '' '; – Tammy

+0

@Tammy '\ copy' को 'psql' क्लाइंट के सापेक्ष पथ मिलते हैं,' COPY' उन्हें सर्वर होस्ट से संबंधित करता है। –

1

कोई बात नहीं, मैं इस सवाल का जवाब मिल गया:

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

कुछ अन्य लोग जो इस एर का अनुभव कर रहे हैं ror यह देखने के लिए फ़ाइल को जांचना चाह सकता है कि इसमें पहली पंक्ति पर हेडर है या नहीं। हालांकि यह आपके मामले में समस्या नहीं थी, इसके आसपास काम करने का तरीका ध्यान देने योग्य है:

COPY my_table FROM 'c:\downloads\file.csv' WITH DELIMITER ',' CSV HEADER; 
संबंधित मुद्दे