如何 运行 有条件地迁移 Knex
How to run a Knex migration conditionally
我错误地删除了将列添加到组 table 的迁移,然后不得不将其添加回我的本地数据库。但是,在生产环境中,迁移并没有被错误删除,所以现在它在运行添加的迁移时会抛出错误。
认识到可能有一个更优雅的解决方案,在这一点上,我只想添加一个条件,仅当添加的列不存在时才运行此添加的迁移。
这是当前添加的迁移:
exports.up = function(knex, Promise) {
return knex.schema.table('groups', function(t) {
t.specificType('fulltext', 'tsvector');
t.index('fulltext', null, 'gin');
});
};
exports.down = function(knex, Promise) {
return knex.schema.table('groups', function(t) {
t.dropColumn('fulltext');
t.dropIndex([ 'fulltext' ]);
});
};
您应该重新创建/填充您的本地数据库...但是无论如何,如果您真的想这样做,您需要使用 https://knexjs.org/#Schema-hasColumn
exports.up = function(knex, Promise) {
return knex.schema.hasColumn('tablename', 'columnname')
.then(res => {
if (res) {
return; // skip
}
return knex.schema.table('groups', function(t) {
t.specificType('fulltext', 'tsvector');
t.index('fulltext', null, 'gin');
});
});
};
我错误地删除了将列添加到组 table 的迁移,然后不得不将其添加回我的本地数据库。但是,在生产环境中,迁移并没有被错误删除,所以现在它在运行添加的迁移时会抛出错误。
认识到可能有一个更优雅的解决方案,在这一点上,我只想添加一个条件,仅当添加的列不存在时才运行此添加的迁移。
这是当前添加的迁移:
exports.up = function(knex, Promise) {
return knex.schema.table('groups', function(t) {
t.specificType('fulltext', 'tsvector');
t.index('fulltext', null, 'gin');
});
};
exports.down = function(knex, Promise) {
return knex.schema.table('groups', function(t) {
t.dropColumn('fulltext');
t.dropIndex([ 'fulltext' ]);
});
};
您应该重新创建/填充您的本地数据库...但是无论如何,如果您真的想这样做,您需要使用 https://knexjs.org/#Schema-hasColumn
exports.up = function(knex, Promise) {
return knex.schema.hasColumn('tablename', 'columnname')
.then(res => {
if (res) {
return; // skip
}
return knex.schema.table('groups', function(t) {
t.specificType('fulltext', 'tsvector');
t.index('fulltext', null, 'gin');
});
});
};