Sequelize 迁移 queryInterface.removeColum 无法工作

Sequelize migration queryInterface.removeColum fails to work

我创建了一个迁移文件,将一列添加为 up,然后在 down 下将其删除。

迁移文件代码如下:

module.exports = {
  up: (queryInterface, Sequelize) =>
    queryInterface.addColumn('Books', 'Rating', {
      allowNull: false,
      type: Sequelize.ENUM('like', 'dislike'),
    }),

  down: (queryInterface, Sequelize) => {
    queryInterface.removeColumn('Books', 'Rating');
  },
};

当我 运行 第一次使用 db:migrate 时,它成功添加了列,但是当我执行 db:migrate:undo:all 然后 运行 再次迁移时,它给我一个错误 sqying

======= 20180211100937-AddedRatingIntoBooks: migrating 
======= 2018-02-11 15:42:46.076 IST 
[64531] ERROR:  type "enum_Books_Rating" already exists 2018-02-11 15:42:46.076 IST 
[64531] STATEMENT:  CREATE TYPE "public"."enum_Books_Rating" AS ENUM('like', 'dislike');
ALTER TABLE "public"."Boo ks" ADD COLUMN "Rating" "public"."enum_Books_Rating";

    ERROR: type "enum_Books_Rating" already exists

问题仍然存在 here

Sequelize 为您定义的每个枚举创建 TYPES,您可以找到 here

ENUM 类型的名称是 "enum"、table 名称和蛇形套管中的列名称的串联。 (enum_Books_Rating 这里)

要为 ENUM 创建迁移,您必须像这样修改 down 函数:

module.exports = {
  up: (queryInterface, Sequelize) =>
    queryInterface.addColumn('Books', 'Rating', {
      allowNull: false,
      type: Sequelize.ENUM('like', 'dislike')
  }),

  down: (queryInterface, Sequelize) =>  
    queryInterface.removeColumn('Books', 'Rating')
      .then(() => queryInterface.sequelize.query('DROP TYPE "enum_Books_Rating";'));
  };

希望对您有所帮助。