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

Если вы используете rethinkdb create создать каталог данных, нет базы данных test не будет создана.

Например, если rethinkdb_data не существует, это будет создавать его без базы test:

rethinkdb create 
rethinkdb 

Это будет делать то же самое, но использует -d указать местоположение каталога данных:

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

После долгой работы я не нашел никаких хороших вариантов, чтобы предотвратить попытку RethinkDB создать базу данных по умолчанию test при запуске. Проблема выше возникает только тогда, когда узлы кластера используют разные каталоги данных. В противном случае они не будут пытаться создавать дополнительные базы данных test, так как другие узлы просто признают, что они уже существуют (создаются первым запущенным узлом).

Я закончил работу над этим в своем программном обеспечении, перечислив всю базу данных с именем test во время запуска из таблицы db_config в базе данных rethinkdb.

Пример:

// 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); 
      }); 
    }); 
});