如何 运行 有条件地迁移 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');
      });
    });
};