【发布时间】:2018-09-16 08:49:33
【问题描述】:
我认为从第一次 db 交互开始使用迁移是个好主意,所以我想创建一个迁移来创建数据库。
knexfile.js
'use strict';
require('dotenv').config({ path: 'process.env' });
const config = {
client: 'pg',
connection: {
host: process.env.DB_URL,
},
};
module.exports = config;
迁移文件:
'use strict';
exports.up = function(knex, Promise) {
return knex.raw('CREATE DATABASE asd');
};
exports.down = function(knex, Promise) {
return knex.raw('DROP DATABASE asd');
};
exports.config = {
transaction: false
};
到目前为止它工作正常,但是当我将database 添加到 knexfile 配置时,由于 Knex 尝试连接到不存在的数据库,它无法迁移。
我还尝试使用新的 Knex 实例进行此单一迁移,例如:
exports.up = function(_, Promise) {
// Remove database from config so Knex won't try to connect
// to a non existing database.
const config = require(process.cwd() + '/knexfile');
config.connection.database = null;
const knex = require('knex')(config);
return knex.raw('CREATE DATABASE asd');
};
但是 knex 在迁移之前已经初始化,所以它失败并出现同样的错误:
error: database "asd" does not exist
关于如何从 Knex 迁移创建数据库的任何想法?我愿意接受任何有关数据库创建的最佳实践,它们可以处理不同环境的数据库 url。
【问题讨论】:
标签: sql postgresql migration knex.js