2014-11-05 7 views
8

में \ copy का उपयोग करते समय कॉलम के लिए अनुपलब्ध डेटा मैं PostgreSQL में .txt फ़ाइल आयात करने का प्रयास कर रहा हूं। Txt फ़ाइल में 6 कॉलम हैं:त्रुटि: psql

Laboratory_Name Laboratory_ID Facility ZIP_Code  City State 

और 213 पंक्तियां।

मैं \copy उपयोग करने के लिए एक मेज इस आदेश का उपयोग PostgreSQL में doe2 कहा जाता है में इस फ़ाइल की सामग्री डाल करने के लिए कोशिश कर रहा हूँ:

\copy DOE2 FROM '/users/nathangroom/desktop/DOE_inventory5.txt' (DELIMITER(' ')) 

यह मुझे इस त्रुटि देता है:

missing data for column "facility" 

मैं इस त्रुटि का सामना करते समय क्या करना है इसके लिए चारों ओर देखा है और कुछ भी मदद नहीं की है। क्या किसी और का इससे सामना हुआ है?

+1

फ़ाइल में डेटा कैसा दिखता है? (नमूने के लायक कुछ पंक्तियां।) – khampson

उत्तर

4

तीन संभावित कारण:

  1. आपकी एक या अधिक फ़ाइल की तर्ज केवल 4 या इससे कम अंतरिक्ष वर्ण (अपने सीमांकक) है।

  2. एक या अधिक स्पेस वर्ण बच गए हैं (अनजाने में)। शायद एक unquoted मूल्य के अंत में एक बैकस्लैश के साथ। (डिफ़ॉल्ट) text प्रारूप के लिए प्रयोग कर रहे हैं, the manual explains:

    Backslash characters (\) can be used in the COPY data to quote data characters that might otherwise be taken as row or column delimiters.

आउटपुट जब लेआउट मिलान के साथ एक मेज से पढ़ने COPY TO या pg_dump से इन गलतियों के किसी भी प्रदर्शन नहीं होगा। लेकिन शायद आपकी फाइल को संपादित किया गया है या एक अलग, दोषपूर्ण स्रोत से है?

  1. आप फ़ाइल का उपयोग नहीं कर रहे हैं सोच रहे हैं। \copy psql कमांड लाइन इंटरफ़ेस का मेटा-कमांड COPY के लिए एक रैपर है और क्लाइंट पर स्थानीय फ़ाइलों को पढ़ता है। यदि आपकी फ़ाइल सर्वर पर रहती है, तो इसके बजाय SQL कमांड COPY का उपयोग करें।
+0

मुझे नहीं लगता कि यह पहला है क्योंकि मैंने अपना डेलीमीटर बदल दिया ',' और वही हुआ। मुझे नहीं लगता कि यह दूसरा है क्योंकि मेरे पास मेरी पूरी फ़ाइल में एक बैकस्लैश नहीं है (मैंने ctrl-f के साथ एक खोज की है)। यदि यह तीसरा है, तो मुझे यकीन नहीं है कि इसे कैसे ठीक किया जाए। मैं pgadmin GUI में COPY कमांड आज़माता हूं और मुझे यह त्रुटि मिलती है: त्रुटि: पढ़ने के लिए फ़ाइल "/users/nathangroom/desktop/DOE_inventory5.txt" नहीं खोल सका: अनुमति अस्वीकार कर दी गई। मैंने स्टैक ओवरफ्लो पर कहीं और देखा कि कमांड खोल में \ copy कमांड का उपयोग उस त्रुटि का समाधान था। – nathanmgroom

+0

@nathanmgroom: आपकी फाइल कहां है? पोस्टग्रेस सर्वर कहां है? आपका ग्राहक कहां है? इसके अलावा, आप मनमाने ढंग से डेलीमीटर को नहीं बदल सकते हैं। यह आपकी फाइल में इस्तेमाल किया जाना चाहिए। जो यह है? डिफॉल्ट टेक्स्ट प्रारूप में एक टैब वर्ण है। –

+0

फ़ाइल मेरे डेस्कटॉप पर है, मुझे नहीं पता कि पोस्टग्रेस सर्वर और क्लाइंट कहां हैं, लेकिन मुझे पता है कि यह मेरी मशीन पर सभी स्थानीय है। सर्वर का कहना है कि यह लोकलहोस्ट 5432 है। मैंने इसे एक सीएसवी के रूप में सहेजने के बाद फिर से कोशिश की और मुझे यह त्रुटि मिल गई: त्रुटि: पूर्णांक के लिए अमान्य इनपुट वाक्यविन्यास: "प्रयोगशाला_आईडी" जो कोई समझ में नहीं आता है क्योंकि निश्चित रूप से उस कॉलम में एक पूर्णांक है। – nathanmgroom

संबंधित मुद्दे