web-dev-qa-db-fra.com

COUCHDB Dump pour déposer et charger du fichier

Je ne peux pas reproduire entre deux serveurs Couchdb, je souhaite donc jeter au fichier d'un serveur et charger du fichier dans l'autre serveur.

J'ai utilisé cette déclaration à la décharge et cela a fonctionné bien:

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

Mais quand j'ai utilisé cette déclaration pour charger:

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

cela a échoué comme ceci:

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

Des idées?

24
eriq

Comme dit, vous devez utiliser le " et pas le comme argument de la -H option

Si vous êtes un utilisateur Linux ou MacOSX, vous pouvez utiliser l'outil Couchdb-Dump , qui fonctionne essentiellement sur Bash Shell.

Il renvoie la base de données sur un fichier local (fichier texte ASCII), formaté comme demandé par http://wiki.apache.org/couchdb/http_bulk_document_api

Ensuite, vous pouvez le restaurer avec le téléchargement de documents en vrac ou avec l'outil de restauration de la vidage CouchDB inclus dans l'emballage.

Ceci est le lien vers l'outil: https://github.com/animamea/couchdb-Dump

Mais vous pouvez également trouver d'autres outils:

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

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

15
Daniele B

Vous pouvez utiliser la ligne de commande suivante pour convertir la sortie de la commande CURL en la structure "DOCS" que le _bulk_docs a besoin:

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

JQ est le nom d'un excellent processeur de ligne de commande très utile (c'est-à-dire dans cette situation).

J'espère que ça aide.

9
Roberto

La raison de votre erreur réelle est que vous utilisez au lieu de plaine ASCII " autour de votre -H argument sur la ligne de commande.

Cependant, la solution réelle ici est de simplement copier le <DATABASE_NAME>.couch fichier de la /path/to/var/lib/couchdb répertoire d'un serveur à l'autre.

7
smathy

En tant que solution alternative, vous pouvez utiliser couchdb-load et couchdb-dump Utilitaires de Couchdb-Python Projet.

2
Kxepal

Nolan de l'équipe Pouchdb fait de superbes outils. Celles-ci fonctionnent bien pour décharger et charger de Couchdb (y compris les pièces jointes):

Dump/Sauvegarde:

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

charge/restaurer:

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

1
PaulMest