मुझे नहीं पता कि आपको वह सिंटैक्स कहां से मिला, लेकिन COPY उस तरह के कॉलम उपनामों की सूची नहीं लेता है। सहायता देखें:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
(AS सूचीबद्ध विकल्पों में से एक नहीं है; पूरा आउटपुट देखने के लिए \d copy चलाएं psql में, या copy . के लिए मैनुअल देखें आदेश ऑनलाइन)।
COPY में मैपिंग की कोई सुविधा नहीं है जो आपको इनपुट सीएसवी के केवल कुछ कॉलम पढ़ने देता है। यह वास्तव में उपयोगी होगा, लेकिन अभी तक इसे लागू करने के लिए किसी के पास समय/ब्याज/वित्त पोषण नहीं था। यह वास्तव में कई डेटा रूपांतरण/फ़िल्टरिंग कार्यों में से केवल एक है जो लोग वैसे भी चाहते हैं।
PostgreSQL COPY में दी गई कॉलम-सूची की अपेक्षा करता है एक ही क्रम में होना, बाएं से दाएं, जैसा कि CSV फ़ाइल में है, और प्रविष्टियों की संख्या उतनी ही है जितनी CSV फ़ाइल में कॉलम हैं। तो अगर आप लिखते हैं:
COPY con (date,kgs)
तब PostgreSQL बिल्कुल दो कॉलम . के साथ इनपुट CSV की अपेक्षा करेगा . यह "date" . के लिए पहले csv कॉलम का उपयोग करेगा "kgs" . के लिए टेबल कॉलम और दूसरा csv कॉलम टेबल कॉलम। इससे कोई फर्क नहीं पड़ता कि सीएसवी हेडर क्या हैं, यदि आप WITH (FORMAT CSV, HEADER ON) निर्दिष्ट करते हैं तो उन्हें अनदेखा कर दिया जाता है , या यदि आप HEADER . निर्दिष्ट नहीं करते हैं, तो इसे सामान्य डेटा पंक्तियों के रूप में माना जाता है ।
PostgreSQL 9.4 FROM PROGRAM जोड़ता है करने के लिए COPY , ताकि आप फ़ाइल को पढ़ने और उसे फ़िल्टर करने के लिए शेल कमांड चला सकें। एक साधारण पायथन या पर्ल स्क्रिप्ट काम करेगी।
यदि यह एक छोटी फ़ाइल है, तो बस अपनी पसंद की स्प्रेडशीट में एक सीएसवी फ़ाइल के रूप में एक प्रति खोलें, अवांछित कॉलम हटाएं, और इसे सहेजें, इसलिए केवल date और kgs कॉलम बने हुए हैं।
वैकल्पिक रूप से, COPY एक स्टेजिंग टेबल पर जिसमें CSV . के समान सभी कॉलम हों , फिर एक INSERT INTO ... SELECT केवल वांछित डेटा को वास्तविक लक्ष्य तालिका में स्थानांतरित करने के लिए।