CouchDB中的Ghost附件

时间:2011-09-15 10:21:43

标签: couchdb replication attachment

我遇到CouchDB 1.1.0的问题。我在笔记本电脑中创建了一个数据库并将其复制到我的服务器上。然后,我将附件添加到本地数据库并将它们复制到远程数据库。

在第二次复制时,似乎出现了错误。附件已正确上传,但我无法将其附加到文档上。

如果我检查数据库大小,它们就在这里。但我无法得到它们,也无法删除它们。 (清理数据库不会删除它们。)

当从远程数据库复制到另一个数据库时,我仍然复制了“幽灵附件”。

有人对此有任何想法吗?我怎么能删除这些附件?

2 个答案:

答案 0 :(得分:7)

也许你有一个文件冲突

与军事冲突或道德冲突不同,CouchDB conflict是正常且有用的,通常在复制后发生。 (冲突有点类似于Git,Mercurial或Bzr中的 branches 。)

在复制期间,CouchDB有时会收到同一文档的替代版本。在这种情况下,CouchDB会将两个版本替换为另一个版本。不幸的是,当您查询CouchDB以获取该文档时,它必须决定发送哪个文档;基本上它只选择一个修订并发送。使用正常的GET /db/doc_id查询,您甚至不会意识到“冲突”(替代)修订版本隐藏在数据库的某个地方。

上面的链接显示了如何查找和解决冲突(当您删除不需要的修订时,剩余的修订版将可见。)关键的示例是查找冲突的视图:

function(doc) {
  // Map function in a CouchDB view to find conflicts.
  if(doc._conflicts) {
    emit(doc._conflicts, null);
  }
}

如果您查询该视图,我认为您会看到一些冲突。如果视图返回0行,那么这根本就不是问题,我们必须继续考虑你的问题。

答案 1 :(得分:0)

是的,我有冲突。谢谢Jason

如果有人需要有关冲突的更多信息,请

http://guide.couchdb.org/draft/conflicts.html

我刚刚创建了一个小的Node脚本,通过视图获取所有冲突并删除它们。