我认为从第一次与数据库交互开始使用迁移是个好主意,因此我希望为数据库创建一个迁移。
knexfile.js
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
};
到这个点为止它可以正常工作,但是当我在knexfile配置中添加database
时,它无法进行迁移,因为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。
database = null
,那么它会尝试针对与用户同名的数据库运行。至少在postgres中是这样工作的。对于postgres,我认为在创建/删除其他数据库时应该使用postgres
数据库。 - icc97