Я использую node-postgres, а в начале моего приложения хочу проверить, существует ли база данных. Поэтому моя идея работы следующая:
- Проверьте, существует ли
myDb
- Если он существует, создайте таблицы
- Если нет, тогда создайте сначала базу данных, затем таблицы
Как вы видите, это очень простой процесс, однако для реализации драйвера требуется, чтобы имя базы данных postgres://username:[email protected]/database
было подключено, а это значит, что вам нужно сначала подключиться к базе данных.
Итак, теперь я должен подключиться к базе данных postgres
в начале, создав запрос для создания базы данных, создав исключение, если он уже существует, затем закрывает мое соединение и подключается к недавно созданной базе данных, затем создание таблиц. Вот код:
var conStringPri = 'postgres://' + username + ':' + password + '@' + host +
'/postgres';
var conStringPost = 'postgres://' + username + ':' + password + '@' + host +
'/' + dbName;
pg.connect(conStringPri, function(err, client, done) { // connect to postgres db
if (err)
console.log('Error while connecting: ' + err);
client.query('CREATE DATABASE ' + dbName, function(err) { // create user db
if (err)
console.log('ignoring the error'); // ignore if the db is there
client.end(); // close the connection
// create a new connection to the new db
pg.connect(conStringPost, function(err, clientOrg, done) {
// create the table
clientOrg.query('CREATE TABLE IF NOT EXISTS ' + tableName + ' ' +
'(...some sql...)';
});
});
});
Как вы видите, я открываю и закрываю соединение дважды, и этот путь мне кажется неправильным. Я буду рад, если вы предложите лучший способ или можете объяснить, как вы это сделали.