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"}
Любые идеи?
Ответы
Ответ 1
Как сказано, вы должны использовать аргумент "
, а не "
как параметр -H
Если вы являетесь пользователем Linux или MacOSX, вы можете использовать инструмент couchdb-dump, который в основном работает с оболочкой bash.
Он удаляет базу данных в локальном файле (текстовый файл ASCII), отформатированный в соответствии с запросом http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API
Затем вы можете восстановить его с помощью массовой загрузки документа или с помощью средства восстановления couchdb-dump, включенного в пакет.
Это ссылка на инструмент: https://github.com/animamea/couchdb-dump
Но вы также можете найти другие инструменты:
https://github.com/stockr-labs/couchdbdump
https://github.com/zebooka/couchdb-dump
Ответ 2
Причина вашей фактической ошибки заключается в том, что вы используете "
вместо обычного ASCII "
вокруг вашего аргумента -H
в командной строке.
Однако реальное решение здесь состоит в том, чтобы просто скопировать файл <DATABASE_NAME>.couch
из каталога /path/to/var/lib/couchdb
с одного сервера на другой.
Ответ 3
Вы можете использовать следующую командную строку для преобразования вывода команды curl в структуру "docs", которую требуется _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 - это имя превосходного процессора командной строки очень полезно (т.е. в этой ситуации).
Надеюсь, что это поможет.
Ответ 4
В качестве альтернативного решения вы можете использовать утилиты couchdb-load
и couchdb-dump
из проекта couchdb-python.
Ответ 5
Нолан из команды PouchDB делает отличные инструменты. Они будут хорошо работать для сброса и загрузки с CouchDB (включая вложения):
Dump/Резервное копирование:
https://github.com/nolanlawson/pouchdb-dump-cli
Load/Восстановление:
https://github.com/nolanlawson/pouchdb-load