Sequelize migration queryInterface.removeColum无法正常工作

Aak*_*rma 4 postgresql sequelize.js sequelize-cli

我创建了一个迁移文件来添加一个列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');
  },
};
Run Code Online (Sandbox Code Playgroud)

当我第一次使用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
Run Code Online (Sandbox Code Playgroud)

该问题仍然住在这里.

sau*_*ahu 7

Sequelize为您定义的每个枚举创建TYPES,您可以在此处找到它

ENUM类型的名称是"enum",表名称和蛇形图中的列名称的串联.(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";'));
  };
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.