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

wz3gfoph  于 2022-12-09  发布在  CouchDB
关注(0)|答案(6)|浏览(176)

我无法在两个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"}

有什么想法吗?

i7uq4tfw

i7uq4tfw1#

如上所述,应该使用"而不是作为-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

lnlaulya

lnlaulya2#

您可以使用以下命令行将curl命令的输出转换为_bulk_docs所需的“docs”结构:

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

jq是一个优秀的命令行处理器的名字,非常有用(即在这种情况下)。
希望能有所帮助。

6mzjoqzu

6mzjoqzu3#

实际错误的原因是,在命令行中,您在-H参数周围使用的是,而不是纯ASCII "
但是,这里真实的的解决方案是将<DATABASE_NAME>.couch文件从一台服务器的/path/to/var/lib/couchdb目录复制到另一台服务器。

8dtrkrch

8dtrkrch4#

作为替代解决方案,您可以使用couchdb-python项目中couchdb-loadcouchdb-dump实用程序

odopli94

odopli945#

来自PouchDB团队的Nolan制作了一些很棒的工具。这些工具可以很好地从CouchDB中转储和加载(包括附件):

转储/备份:

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

载入/还原:

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

xxhby3vn

xxhby3vn6#

还有github.com/danielebailo/couchdb-dump,它可能有助于清除旧的 transient ,作者说:
我们已经看到15 GB的数据库文件,只包含2.1GB的原始JSON,在导入后减少到磁盘上的2.5GB!
如果您想同步集群,这里也有关于update_seq如何工作的提示。

相关问题