我有一个名为characters的表。每个角色都有一个名为" state"的枚举,可以是"悲伤"或者"快乐"。如何添加新状态" confused"到我的专栏?我尝试过这次迁移,但失败了:
migration.describeTable('characters').success(function (attributes) {
migration.changeColumn('characters', 'state',
{
type: DataTypes.ENUM,
values: ['sad', 'happy', 'confused']
})
.complete(done);
});
它抱怨错误:输入" enum_characters_state"已经存在。
答案 0 :(得分:3)
使用Sequelize的最新版本,您可以通过运行查询来实现此目的(Postgres假设):
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.sequelize.query("ALTER TYPE enum_character_state ADD VALUE 'confused';");
}
};
答案 1 :(得分:1)
使用以下脚本创建迁移:
module.exports = {
up : function (queryInterface) {
return queryInterface
.changeColumn(tableName, columnName, {
values: arrayOfNewValues
});
},
down: function (queryInterface) {
return queryInterface
.changeColumn(tableName, columnName, {
values: arrayOfOldValues
});
}
};
答案 2 :(得分:0)
如果要重新添加,则需要删除该类型。如果没有别的,那么在向下迁移中很有用。
Queries
答案 3 :(得分:0)
扩展briangonzalez答案,您还需要一个向下功能来撤消迁移:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.sequelize.query("ALTER TYPE enum_type_name ADD VALUE 'new_value'");
},
down: (queryInterface, Sequelize) => {
var query = 'DELETE FROM pg_enum ' +
'WHERE enumlabel = \'new_value\' ' +
'AND enumtypid = ( SELECT oid FROM pg_type WHERE typname = \'enum_type_name\')';
return queryInterface.sequelize.query(query);
}
};
更改 enum_type_name 和 new_value 以满足您的需求。