2012-05-04 7 views
5

मैं पोस्टग्रेस COPY कमांड के साथ डेटाबेस में CSV फ़ाइलों से डेटा कॉपी करने के लिए स्थानीय पोस्टग्रेस डीबी के साथ जेडीबीसी का उपयोग कर रहा हूं। मैं मौजूदा सीएसवी फ़ाइल को सीएसवी प्रारूप में पार्स करने के लिए जावा का उपयोग डीबी में टेबल से मेल खाता हूं। मैं फिर इस पार्स किए गए सीएसवी को अपनी स्थानीय डिस्क में सेव करता हूं। मेरे पास जेडीबीसी ने मेरे स्थानीय डीबी में पार्स किए गए सीएसवी का उपयोग करके एक सीओपीवाई कमांड निष्पादित किया है। सबकुछ अपेक्षित के रूप में काम करता है। अब मैं जेडीबीसी का उपयोग कर रिमोट सर्वर पर पोस्टग्रेस डीबी पर एक ही प्रक्रिया करने की कोशिश कर रहा हूं। हालांकि, जब JDBC कॉपी पर अमल करने की कोशिश करता रहाक्या PostgreSQL कॉपी एक दूरस्थ स्थान से सीएसवी पढ़ सकते हैं?

मिल
org.postgresql.util.PSQLException: ERROR: could not open file "C:\data\datafile.csv" for reading: No such file or directory 

Am मैं समझ में सही कर कॉपी आदेश बताता है कि डीबी इस फ़ाइल के लिए स्थानीय स्तर पर देखने के लिए? अर्थात। रिमोट सर्वर इसकी सी पर देख रहा है: ड्राइव (मौजूद नहीं है)।

यदि ऐसा है, तो रिमोट मशीन पर "स्थानीय रूप से" के बजाय मेरे कंप्यूटर को देखने के लिए कॉपी कमांड को इंगित करने के लिए वैसे भी है? कॉपी प्रलेखन के माध्यम से पढ़ना मुझे कुछ भी नहीं मिला जो इस कार्यक्षमता को इंगित करता है।

यदि कार्यक्षमता मौजूद नहीं है, तो मैं केवल स्थानीय डेटाबेस को स्थानीय रूप से पॉप्युलेट करने के बारे में सोच रहा हूं, फिर दूरस्थ सर्वर पर डेटाबेस में कॉपी कर रहा हूं लेकिन सिर्फ यह जांचना चाहता था कि मुझे कुछ भी याद नहीं आया।

आपकी मदद के लिए धन्यवाद।

उत्तर

4

आप JDBC का उपयोग करते हैं, आप के लिए सबसे अच्छा समाधान http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html

अन्यथा (के रूप में पहले से ही दूसरों के द्वारा ध्यान दिया) PostgreSQL कॉपी एपीआई का उपयोग करने के लिए आप psql जिस पर स्थानीय फ़ाइलों तक पहुँचने की अनुमति देता है से \ प्रतिलिपि का उपयोग कर सकते है क्लाइंट मशीन

+0

आपके उत्तर के लिए धन्यवाद। मैं अनजान था कि यह वर्ग अस्तित्व में था। मैं इसे अपने पार्सिंग/आयात कार्यक्रम में लागू करने जा रहा हूं। भविष्य में डेटा को संभालने के लिए। – babcoccl

1

मेरे ज्ञान के लिए, COPY कमांड का उपयोग केवल उस मशीन से स्थानीय रूप से (या तो stdin या फ़ाइल से) पढ़ने के लिए किया जा सकता है, जहां डेटाबेस चल रहा है।

आप एक खोल स्क्रिप्ट जहां आप जावा रूपांतरण चलाने कर सकता है, तो psql का प्रयोग कर एक \copy आदेश है, जो ग्राहक मशीन पर एक फ़ाइल से पढ़ता है क्या करना है।

+1

COPY "STDIN से" पढ़ सकता है - इसे डिस्क से प्रति फ़ाइल पढ़ने की आवश्यकता नहीं है, प्रति से। –

+0

@FrankFarmer आपकी टिप्पणी के अनुसार अपडेट किया गया। –

5

के रूप में अपने क्लाइंट मशीन पर इस प्रकार

COPY testtable (column1, c2, c3) FROM STDIN WITH CSV; 
1,2,3 
4,5,6 
\. 

तब निष्पादित अपने ग्राहक

पर, अपने एसक्यूएल फ़ाइल बनाएँ

psql -U postgres -f /mylocaldrive/copy.sql -h remoteserver.example.com

+0

धन्यवाद, मैंने यही किया (कुछ रूप में) क्योंकि आखिरकार मेरे पास स्थानीय मशीन पर टेबल बन गई थी। आगे जाकर मैं नीचे सूचीबद्ध एपीआई का उपयोग करने जा रहा हूं। – babcoccl

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