RethinkDB:​​有没有办法通过GUI或rql克隆同一个集群中的数据库?

Klu*_*dge 3 rethinkdb

假设我的群集上有一个名为my_db的数据库.我可以克隆这个数据库,以便在同一个集群上我可以使用my_db_cloned而不处理dump/export吗?

Dan*_*wes 6

您可以通过ReQL将数据从一个表复制到另一个表中,如下所示: r.table(destination).insert(r.table(source))

这也可以在给定数据库中的所有表的循环中运行:

r.db(source).tableList().forEach(function (t) {
  return r.db(destination).table(t).insert(r.db(source).table(t));
})
Run Code Online (Sandbox Code Playgroud)

同样,您可以构造一个循环来重新创建所有表:

r.db(source).tableList().forEach(function (t) {
  return r.db(destination).tableCreate(t);
})
Run Code Online (Sandbox Code Playgroud)

此版本不保留自定义主键或持久性设置,但您明白了.

最后克隆二级索引

r.db(source).tableList().forEach(function (t) {
  return r.db(source).table(t).indexStatus().map(function (idx) {
    return r.db(destination).table(t).indexCreate(
      idx('index'), idx('function'), {geo: idx('geo'), multi: idx('multi')});
  });
})
Run Code Online (Sandbox Code Playgroud)

对于所有这些查询,我建议在node.js中运行它们,或者使用Python或Ruby客户端运行它们.在数据资源管理器中运行它们可能不会起作用,因为它会在一分钟之后耗尽长时间运行的查询.


cof*_*mug 0

目前没有专门的克隆命令。您必须转储数据库并以不同的名称将其恢复以获得数据的第二个副本。