我创建了一个迁移文件,将列添加为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。
答案 0 :(得分:7)
Sequelize为您定义的每个枚举创建TYPES,您可以找到here
ENUM类型的名称是“enum”,表名和蛇形图中列名的串联。 (enum_Books_Rating
这里)
要为ENUM
创建迁移,您必须修改您的向下功能:
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";'));
};
希望这有帮助。