gulp/knex创建/删除数据库任务

nsc4cvqm  于 2022-12-08  发布在  Gulp
关注(0)|答案(6)|浏览(212)

我有一个Express.js Web应用程序,它使用Knex.js作为SQL查询构建器和迁移引擎。虽然Knex.js有创建、删除和修改表的方法,但它没有创建/删除数据库本身的方法。
我想知道是否有Knex.js的扩展或者甚至是一个gulp任务,可以让你创建/删除一个数据库。我找不到任何扩展。我使用的是PostgreSQL数据库。

lsmd5eda

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

这是可行的(目前对我来说足够好),但我有兴趣听到其他解决方案。

ua4mk5z4

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");
  });
d5vmydt9

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')
        }
      }
    }))
})
ehxuflar

ehxuflar4#

Postgres将接受应用程序的连接字符串以创建应用程序数据库。

环境/开发

DATABASE_URL=postgres://user:password@localhost:5432/sample_development

软件包. json

"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软件包,但这不是必需的。)

6jjcrrmo

6jjcrrmo5#

松散相关(不是Gulp问题),但这是我在Knex应用程序中创建数据库的解决方案。我只是忽略了错误,没有与knexfileseed集成,所以没有经常被调用,而是从package.json调用。dropdbcreatedb可执行文件随Postgres提供:

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

8zzbczxx6#

knex-db-manager是一个可以执行此操作的插件包。

相关问题