2016-10-28 6 views
1

rethinkdbインスタンスを起動すると、自動的に 'test'というデータベースが作成されます。あなたは、複数のインスタンスを実行すると、これは問題につながるrethinkdb proxyを使用してそれらをクラスタ化する場合:RethinkDBがテストデータベースを作成するのを防ぐ方法

:あなたは、データベースを削除しようと

Database name conflict: test is the name of more than one database

r.dbDrop('test').run(conn, function(result) { 
    console.log(result) // Will result in error 
}); 

これは、次のエラーが生成されますを使用して、すなわち、

ReqlOpFailedError: Database 'test' is ambiguous; there are multiple databases with that name in r.dbDrop("test")

どのようにしてRethinkDBが 'tes t 'データベースを自動的に作成しますか?または、名前の競合が発生した場合にデータベースを削除する方法はありますか?

答えて

1

、何testデータベースが作成されません。これは、同じことを行います

rethinkdb create 
rethinkdb 

が、データディレクトリの場所を指定する-dを使用しています:rethinkdb_dataが存在しない場合は

たとえば、これはありませんtestデータベースとそれを作成します

rethinkdb create -d /var/lib/rethinkdb/data 
rethinkdb -d /var/lib/rethinkdb/data 
0

しばらく掘り下げた後、RethinkDBが起動時にデフォルトのtestデータベースを作成しないようにする良いオプションは見つかりませんでした。上記の問題は、クラスタノードが異なるデータディレクトリを使用する場合にのみ発生します。そうでなければ、追加のtestデータベースを作成しようとはしません。これは、他のノードが既に存在していること(単に起動した最初のノードによって作成されたもの)を認識するためです。

db_configテーブルの起動時にtestという名前のすべてのデータベースをrethinkdbデータベースに列挙して、これをバックエンドソフトウェアで解決しました。

例:あなたはデータディレクトリを作成するためにrethinkdb createを使用する場合は

// Read from the database 'rethinkdb' that holds information about other databases 
r.db("rethinkdb") 

// Table db_config contains database id, name information 
.table("db_config") 

// Filter by name 'test' 
.filter({name: "test"}) 
.run(conn, function(err, cursor) { 

    // Get results from cursor by id and rename 
    cursor.each(function(err, result){ 
     r.db("rethinkdb") 
      .get(result.id) 
      .update({name: "other_name"}) 
      .run(conn, function(err, result) { 
       console.log(result.replaced); 
      }); 
    }); 
}); 
関連する問題