我有一个Express.js Web应用程序,它使用Knex.js作为SQL查询构建器和迁移引擎。虽然Knex.js有创建、删除和修改表的方法,但它没有创建/删除数据库本身的方法。我想知道是否有Knex.js的扩展或者甚至是一个gulp任务,可以让你创建/删除一个数据库。我找不到任何扩展。我使用的是PostgreSQL数据库。
lsmd5eda1#
我不确定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(); }); });
这是可行的(目前对我来说足够好),但我有兴趣听到其他解决方案。
ua4mk5z42#
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"); });
d5vmydt93#
您可以添加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') } } })) })
ehxuflar4#
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。(This使用env-cmd软件包,但这不是必需的。)
npm run-script db:create:development
env-cmd
6jjcrrmo5#
松散相关(不是Gulp问题),但这是我在Knex应用程序中创建数据库的解决方案。我只是忽略了错误,没有与knexfile或seed集成,所以没有经常被调用,而是从package.json调用。dropdb和createdb可执行文件随Postgres提供:
knexfile
seed
package.json
dropdb
createdb
// $ yarn node ./lib/createdb.mjs import { exec } from 'child_process'; if (process.env.NODE_ENV === 'development') { exec(`createdb ${dbName} --template=template0`, (error, stdout, stderr) => { if (!error) return console.log(`"${dbName}" database created!`); return console.error('createdb stderr:', stderr); }); }
8zzbczxx6#
knex-db-manager是一个可以执行此操作的插件包。
6条答案
按热度按时间lsmd5eda1#
我不确定PostgreSQL,但我在MySQL中遇到了同样的问题。我发现你可以使用knex连接而不选择数据库,用原始SQL创建数据库,然后重新连接选择新的数据库。
下面是一个独立脚本,它创建一个具有单列表的新数据库:
这是可行的(目前对我来说足够好),但我有兴趣听到其他解决方案。
ua4mk5z42#
d5vmydt93#
您可以添加https://www.npmjs.org/package/gulp-shell
这应该可行:
ehxuflar4#
Postgres将接受应用程序的连接字符串以创建应用程序数据库。
环境/开发
软件包. json
然后运行
npm run-script db:create:development
。(This使用
env-cmd
软件包,但这不是必需的。)6jjcrrmo5#
松散相关(不是Gulp问题),但这是我在Knex应用程序中创建数据库的解决方案。我只是忽略了错误,没有与
knexfile
或seed
集成,所以没有经常被调用,而是从package.json
调用。dropdb
和createdb
可执行文件随Postgres提供:8zzbczxx6#
knex-db-manager是一个可以执行此操作的插件包。