SQLクエリビルダーおよび移行エンジンとしてKnex.jsを使用するExpress.jsWebアプリケーションがあります。 Knex.jsにはテーブルを作成、削除、変更するためのメソッドがありますが、データベース自体を作成/削除するためのメソッドはありません。
Knex.jsの拡張機能や、データベースの作成/削除を可能にするgulpタスクがあるかどうか疑問に思いました。何も見つかりませんでした。 PostgreSQLデータベースを使用しています。
PostgreSQLについてはよくわかりませんが、MySQLでも同じ問題が発生します。 knexを使用して、データベースを選択せずに接続し、生のSQLでデータベースを作成してから、新しいデータベースを選択して再接続できることを発見しました。
これは、単一列のテーブルで新しいデータベースを作成するスタンドアロンスクリプトです。
var conn = {
Host : '127.0.0.1',
user : 'user',
password : 'pass',
charset : 'utf8'
};
// connect without database selected
var knex = require('knex')({ client: 'mysql', connection: conn});
knex.raw('CREATE DATABASE my_database')
.then(function(){
knex.destroy();
// connect with database selected
conn.database = 'my_database';
knex = require('knex')({ client: 'mysql', connection: conn});
knex.schema.createTable('my_table', function (table) {
table.string('my_field');
})
.then(function() {
knex.destroy();
});
});
これは機能しますが(今のところ私には十分です)、他の解決策について聞いてみたいです。
var knex = require('knex')({
client: 'pg',
connection: {
Host: Host,
user: USERNAME,
password: PASSWORD,
database: 'postgres',
charset: 'utf8'
}
});
knex.raw('CREATE DATABASE DB_NAME;')
.then(function() {
return knex.raw('DROP DATABASE DB_NAME;')
})
.finally(function () {
console.log("Done");
});
追加できます https://www.npmjs.org/package/gulp-Shell
これは機能するはずです:
var gulp = require('gulp')
var Shell = require('gulp-Shell')
gulp.task('example', function () {
return gulp.src('*.js', {read: false})
.pipe(Shell([
'psql DROP DATABASE dbname;',
'psql CREATE DATABASE dbname;'
], {
templateData: {
f: function (s) {
return s.replace(/$/, '.bak')
}
}
}))
})
Postgresは、アプリケーションの接続文字列を受け入れて、アプリケーションデータベースを作成します。
DATABASE_URL=postgres://user:password@localhost:5432/sample_development
"scripts": {
"db:create:development": "env-cmd env/development psql ${DATABASE_URL} -c 'CREATE DATABASE sample_test'",
"db:create:test": "env-cmd env/test psql ${DATABASE_URL} -c 'CREATE DATABASE sample_test'"
}
次に、npm run-script db:create:development
を実行します。
(これはenv-cmd
パッケージを使用しますが、必須ではありません。)