如何重命名CouchDB数据库?

如何重命名CouchDB数据库?,couchdb,Couchdb,我没有看到用于重命名CouchDB数据库的API,也没有在Futon中看到用于重命名CouchDB数据库的选项 除了复制到另一个数据库然后删除原始数据库之外,还有一种方法可以一步重命名数据库吗?如果您可以访问数据库文件本身(位于/var/lib/couchdb中,具体取决于您的安装),您只需重命名即可 据我所知,这将有效地“重命名”数据库。我会确保您执行此操作时服务器未运行,以防万一。再加上Dominic和PPPaul所说的 重命名文件绝对是一种方法(请确保将其重命名为同一用户,不要意外地将所有

我没有看到用于重命名CouchDB数据库的API,也没有在Futon中看到用于重命名CouchDB数据库的选项


除了复制到另一个数据库然后删除原始数据库之外,还有一种方法可以一步重命名数据库吗?

如果您可以访问数据库文件本身(位于
/var/lib/couchdb
中,具体取决于您的安装),您只需重命名即可


据我所知,这将有效地“重命名”数据库。我会确保您执行此操作时服务器未运行,以防万一。

再加上Dominic和PPPaul所说的

重命名文件绝对是一种方法(请确保将其重命名为同一用户,不要意外地将所有权更改为
root
或其他内容)

是的,在完全运行的生产环境中这样做是完全安全的。HTTP/REST API的许多优点之一是,不存在与数据库有状态连接的适配器。每个请求都是一个新请求。因此,基本上,重命名完成后对CouchDB的第一个请求将能够使用新名称

但是等等,还有更多

一件非常酷的事情是,即使在重命名之后,CouchDB服务器仍然有一个文件本身的打开文件句柄(这不受重命名inode的影响),因此在CouchDB服务器实际重新启动之前,您仍然可以使用旧名称访问DB

更新 评论中的观察非常好,显然DB名称需要以小写字母开头,否则它不会出现在Futon中

更新
我记得的另一件事是:要找出数据库文件的位置,请运行以下命令:
coach config--DB dir

如果不想损坏数据库,请在CouchDB未运行时重命名.coach文件。

我使用的是CouchDB 2,我假设前面的答案是针对旧版本的,因为使用'coach config--db dir'命令找到的/var/lib/couchdb文件夹中没有列出数据库文件


我遵循的最简单的方法是使用futon并将要重命名的数据库复制为新的所需名称,然后删除旧数据库。

这样安全吗?我的意思是,这不是有一些副作用吗?老实说,我不完全确定,因为我自己从来没有在生产中这样做过。但我确实知道,简单地复制数据库文件就足以进行备份/恢复,因此重命名也可能是安全的。有道理的话,我会尝试一下,以确保安全。;)路径
/var/lib/couchdb
似乎过时了,我只能看到目录
.delete,eb1d890cf2a17c53cff7a289065c4dd5,.\u replicator\u design,shard,.\u users\u design
和文件
\u dbs.coach,\u nodes.coach,\u replicator.coach,\u users.coach
谢谢你的额外提醒。)这太糟糕了,没有API调用。如果您没有对CouchDB服务器的完全访问权限,则此解决方案对您不可用。似乎你必须复制和删除,这确实会产生失去修订和查看索引数据的副作用。使用这种方法,数据库不再在Futon中列出,你知道如何补救吗?编辑:忽略这一点,我已经用大写字母前缀重命名了它们,它们必须以小写字母开头。实际上这不是问题,因为CouchDB的仅附加设计。您可以在CouchDB运行时重命名和/或复制,而不会损坏。(当然,这假设您的应用程序可以容忍非原子写入。但是,如果它不能容忍非原子写入,那么您首先就不应该使用CouchDB。)不安全的是,CouchDB将有一个打开的文件描述符指向文件,并且不知道重命名。事实上,使用CouchDB v2+我看不到任何其他“重命名”方法数据库。即使使用复制,我也遇到了问题,但它不起作用:(