CouchDB转储到文件并从文件加载

eri*_*riq 24 backup load couchdb dump database-backups

我不能在两个couchdb服务器之间复制,所以我想从一个服务器转储到文件并从文件加载到另一个服务器.

我用这个语句转储,它工作正常:

curl -X GET http://localhost:5984/<DATABASE_NAME>/_all_docs?include_docs=true > FILE.txt
Run Code Online (Sandbox Code Playgroud)

但是,当我使用此语句加载时:

curl -d @FILE.txt -H “Content-Type: application/json” -X POST http://localhost:5984/<DATABASE_NAME>/_bulk_docs
Run Code Online (Sandbox Code Playgroud)

它失败了:

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

有任何想法吗?

Dan*_*e B 15

如上所述,您应该使用选项"而不是选项的as参数-H

如果您是Linux或MacOSX用户,则可以使用couchdb-dump工具,该工具基本上适用于bash shell.

它将数据库转储到本地文件(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


小智 9

您可以使用以下命令行将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
Run Code Online (Sandbox Code Playgroud)

jq是一个非常有用的优秀命令行处理器的名称(即在这种情况下).

希望能帮助到你.


sma*_*thy 7

您实际出错的原因是您在命令行的参数周围使用了ASCII而不是纯ASCII ."-H

但是,这里的真正解决方案是将<DATABASE_NAME>.couch文件从/path/to/var/lib/couchdb目录从一个服务器复制到另一个服务器.