2013-01-25 59 views
6

स्वीकार नहीं करेगा मैं संस्करण 9.2 में एक CSV फ़ाइल आयात करना चाहता हूं लेकिन सीएसवी फ़ाइल में अंतिम कॉलम स्थिति में डबल-कोट दोहरे उद्धरण को एक पूर्ण मान का प्रतिनिधित्व करने के लिए है :सीएसवी को postgreSQL तालिका में कॉपी नहीं कर सकता: टाइमस्टैम्प कॉलम खाली स्ट्रिंग

"2","1001","9","2","0","0","130","","2012-10-22 09:33:07.073000000",""

किस प्रकार समय-चिह्न का एक स्तंभ के लिए मैप किया गया है। postgreSQL को "" पसंद नहीं है। मैंने नल विकल्प सेट करने का प्रयास किया है, लेकिन शायद मैं इसे सही तरीके से नहीं कर रहा हूं? मैंने NULL as '"" और NULL '' और NULL as '' और NULL "" की कोशिश की है लेकिन सफलता के बिना; यहां मेरे आदेश दिया गया है:

COPY SCH.DEPTS 
FROM 'H:/backups/DEPTS.csv' 
WITH (
FORMAT CSV, 
DELIMITER ',' , 
NULL '', 
HEADER TRUE, 
QUOTE '"' 
) 

लेकिन यह एक त्रुटि के साथ विफल:

ERROR: invalid input syntax for type timestamp: ""

CONTEXT: COPY depts, line 2, column expirydate: ""

पी.एस. क्या COPY कमांड में बूलियन के स्ट्रिंग प्रस्तुति को निर्दिष्ट करने का कोई तरीका है? सीएसवी (जिसमें से कई हैं) का उत्पादन करने वाली उपयोगिता "झूठी" और "सत्य" का उपयोग करती है।

उत्तर

7

रिक्त स्ट्रिंग ("") एक मान्य टाइमस्टैम्प नहीं है, और COPY एक FORCE NULL या FORCE EMPTY TO NULL मोड की पेशकश करने के प्रकट नहीं होता है; इसके विपरीत, FORCE NOT NULL है, लेकिन वह वही नहीं करेगा जो आप चाहते हैं।

आप शायद टाइमस्टैम्प के लिए एक text क्षेत्र, शायद एक UNLOGGED या TEMPORARY मेज के साथ एक तालिका में डेटा COPY है, तो एक INSERT INTO real_table SELECT col1, col, col3, NULLIF(tscol,'') FROM temp_table; का उपयोग की जरूरत है।

COPY को true और false को बूलियन के रूप में स्वीकार करना चाहिए, इसलिए आपको वहां कोई समस्या नहीं होनी चाहिए।

वैकल्पिक रूप से, सीएसवी को एक साधारण पायथन स्क्रिप्ट और csv मॉड्यूल के साथ पढ़ें, और फिर psycopg2COPY पंक्तियों को पीजी में उपयोग करें। या बस नया साफ सीएसवी लिखें और उसे COPY में फ़ीड करें। या एक ईटीएल उपकरण का उपयोग करें जो डेटा पेंटाहो केटल या Talend की तरह बदलता है।

+0

एमएसएफटी से यह निर्यात प्रारूप किसी भी सीएसवी के विपरीत है जो मैंने पहले देखा है, जिसमें यह सभी मूल्यों को उद्धृत करता है चाहे वे संख्यात्मक या तार हैं या नहीं। लगभग जैसे कि वे निर्यात को उद्देश्य पर कम उपयोगी बना रहे थे ;-) यह 'सत्य' '' सत्य 'नहीं भेज रहा है। निर्यात को साफ करने का समय। केटल और Talend के सुझावों के लिए धन्यवाद। – Tim