Reputation: 469
I am trying to write a migration in Sequelize and MySQL, which sets the unique attribute to false. This is my approach so far:
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn("users", "name", {
type: Sequelize.STRING,
allowNull: false,
unique: true,
});
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
allowNull: false,
unique: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn("users", "name", {
type: Sequelize.STRING,
allowNull: true,
unique: false,
});
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
allowNull: true,
unique: false,
});
},
};
The up migration works like charme, the down migration works for allowNull, but not for unique attribute. I am new to Sequelize so I am wondering, what is going wrong here. Can someone help me out?
Thank you very much in advance.
Upvotes: 3
Views: 1845
Reputation: 2545
Sequelize has "removeConstraint" method, using which you will be able to remove the constraint for the attribute.
public removeConstraint(tableName: string, constraintName: string, options: Object): Promise
Actually, if you don't specify the "constraintName" in creating, it should be of the form "attributename_unique_key".
Please try using this way
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn("users", "name", {
type: Sequelize.STRING,
allowNull: false,
unique: true,
});
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
allowNull: false,
unique: true,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.changeColumn("users", "name", {
type: Sequelize.STRING,
allowNull: true,
});
await queryInterface.removeConstraint("users", "name_unique_key");
await queryInterface.changeColumn("users", "email", {
type: Sequelize.STRING,
allowNull: true,
});
await queryInterface.removeConstraint("users", "email_unique_key");
},
};
For more information please check the documentation here
Upvotes: 3