2012-07-24 9 views
23

से फाइल करने और लोड करने के लिए CouchDB डंप को दो couchdb सर्वरों के बीच दोहराना नहीं है, इसलिए मैं एक सर्वर से फ़ाइल को डंप करना और फ़ाइल से दूसरे सर्वर में लोड करना चाहता हूं।फ़ाइल को

मैं डंप करने के लिए इस बयान का इस्तेमाल किया और यह ठीक काम किया:

curl -X GET http://localhost:5984/<DATABASE_NAME>/_all_docs?include_docs=true > FILE.txt 

लेकिन लोड करने के लिए जब मैं इस बयान का इस्तेमाल किया:

curl -d @FILE.txt -H “Content-Type: application/json” -X POST http://localhost:5984/<DATABASE_NAME>/_bulk_docs 

इसे इस तरह विफल रहा है:

curl: (6) Could not resolve host: application; Host not found {"error":"bad_content_type","reason":"Content-Type must be application/json"} 

कोई विचार?

+0

होगा इस प्रत्येक दस्तावेज़ के संशोधन का बैकअप लें? – user3526

उत्तर

14

के रूप में कहा, तुम -H विकल्प

के तर्क के रूप में " और नहीं का उपयोग करना चाहिए आप एक लिनक्स या MacOSX उपयोगकर्ता आप couchdb-dump उपकरण है, जो मूल रूप से बैश खोल पर काम करता है का उपयोग कर सकते हैं।

यह एक स्थानीय फाइल (ASCII पाठ फ़ाइल) पर डेटाबेस, के रूप में द्वारा http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API

अनुरोध किया स्वरूपित उदासीनता तो फिर तुम या थोक दस्तावेज़ अपलोड के साथ पुनर्स्थापित कर सकते हैं CouchDB-डंप के साथ उपकरण बहाल पैकेज में शामिल।

यह उपकरण के लिए लिंक है: https://github.com/animamea/couchdb-dump

लेकिन क्या आप भी अन्य उपकरणों पा सकते हैं:

https://github.com/stockr-labs/couchdbdump

https://github.com/zebooka/couchdb-dump

+1

रिपोर्ट किया गया है यह एक उपकरण का उपयोग करने के लिए एक बहुत छोटा काम लगता है। Curl आदेश मेरे लिए पूरी तरह से काम किया :) –

+0

https://github.com/animamea/couchdb-dump मेरे लिए काम नहीं किया :(sed जादू के अंदर एक साधारण दस्तावेज़ों पर भी अमान्य jsons पैदा करता है –

+0

@MaxLobur यहां पर। –

7

आपकी वास्तविक त्रुटि का कारण यह है कि आप कमांड लाइन पर -H तर्क के आस-पास सादे ASCII " के बजाय का उपयोग कर रहे हैं।

हालांकि, असली समाधान यहां <DATABASE_NAME>.couch फ़ाइल को /path/to/var/lib/couchdb निर्देशिका से एक सर्वर से दूसरे सर्वर पर कॉपी करना है।

+0

मैंने पहले * .couch फ़ाइलों की प्रतिलिपि बनाने का प्रयास किया, लेकिन डेटाबेस प्रविष्टियों तक पहुंचने के बाद, मुझे त्रुटि मिली, कि डेटाबेस गलत एरलांग संस्करण के साथ बनाया गया था। – eriq

+1

ठीक है, ठीक है, दोनों couches एक ही संस्करण होने की जरूरत है। – smathy

+1

यकीन है! मैं कैसे स्वीकार करूं? कभी भी यह अच्छा और सही जवाब नहीं था। मैं स्पष्ट रूप से इस प्रणाली से बहुत परिचित नहीं हूँ। – eriq

2

वैकल्पिक समाधान के रूप में, आप couchdb-load और couchdb-dump उपयोगिता couchdb-python प्रोजेक्ट से उपयोग कर सकते हैं।

+0

चेतावनी: वे अजगर 3.x के साथ काम नहीं करते हैं (TypeError: लिखें() तर्क str होना चाहिए, बाइट्स नहीं) –

+0

@MaxLobur क्यों यहां इसके बारे में रिपोर्ट नहीं करना https://github.com/djc/couchdb-python/ मुद्दे ? (; – Kxepal

+1

पहले से ही –

6

आप उत्पादन में परिवर्तित करने के लिए निम्न आदेश पंक्ति का उपयोग कर सकते हैं "डॉक्स" संरचना के कर्ल कमांड के _bulk_docs की आवश्यकता है:

curl -X GET 'http://localhost:5984/mydatabase/_all_docs?include_docs=true' | jq '{"docs": [.rows[].doc]}' | jq 'del(.docs[]._rev)' > db.json 

jq एक उत्कृष्ट कमांड लाइन प्रोसेसर का नाम बहुत उपयोगी है (यानी। इस दशा में)।

उम्मीद है कि यह मदद करता है।

+0

jq का उपयोग करके आपका उदाहरण बहुत उपयोगी था, धन्यवाद! मैंने यह भी पाया कि मेरी फाइलों में से एक बहुत बड़ी थी लोड करने के लिए, और jq का उपयोग करके खंडन करने के लिए चाल है: 'cat db.json | jq '{" docs ": .docs [0: 30000]}'> db.0-30000.json; cat db.json | jq '{ "दस्तावेज़":। डॉक्स [30000:]} '> db.30000-.json' –

+0

क्या संशोधन शामिल करने का कोई तरीका है? –

+0

हां, ज़ाहिर है, बस' jq 'del (.docs [] को छोड़ दें। _rev) '' भाग जो संशोधन को हटा देता है। क्या आपको वह चाहिए? ध्यान दें कि यो यदि आप संशोधन, AFAIK शामिल करते हैं तो आप फ़ाइल को पुनर्स्थापित करने में सक्षम नहीं होंगे। – Roberto

1

पाउचडीबी टीम से नोलन कुछ बेहतरीन टूल बनाता है।

डंप/बैकअप:: ये अच्छी तरह से डंप और CouchDB से लोड (अनुलग्नक सहित) के लिए काम करेंगे

https://github.com/nolanlawson/pouchdb-dump-cli

लोड/पुनर्स्थापित:

https://github.com/nolanlawson/pouchdb-load

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