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

ife*_*ins 13 database migration express knex.js gulp

我有一个Express.js Web应用程序,它使用Knex.js作为SQL查询构建器和迁移引擎.虽然Knex.js具有创建,删除和更改表的方法,但它没有创建/删除数据库本身的方法.

我想知道是否有Knex.js的扩展,甚至是允许你创建/删除数据库的gulp任务.我找不到任何东西.我正在使用PostgreSQL数据库.

nic*_*ick 25

我不确定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();
    });
  });
Run Code Online (Sandbox Code Playgroud)

这有效(对我来说已经足够了),但我很想知道其他解决方案.

  • 对于postgresql,它会要求一个默认数据库,你可以只使用postgres作为默认数据库. (9认同)

siy*_*ang 5

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");
  });
Run Code Online (Sandbox Code Playgroud)