gpt4 book ai didi

migration - Sequelize - 使用索引和约束重命名列

转载 作者:行者123 更新时间:2023-12-02 23:37:57 27 4
gpt4 key购买 nike

我想使用 Sequelize 创建迁移,以使用 CamelCase 重命名列,从而拥有一个包含 Snake_case 列的数据库。

我使用 Sequelize 创建迁移并使用迁移。

module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.renameColumn('my_some_table', 'totoId', 'toto_id');
},

down: function(queryInterface, Sequelize) {
//
}
};

但是...我对此列 (totoId) 和名称列有一个唯一约束,名为 my_some_table_name_totoId_uindex,并且我在此列 (totoId) 上也有一个索引。

如何强制重命名具有唯一约束和一个索引的列?

最佳答案

您必须删除所有约束,重命名该列,然后重新添加约束。通过对 totoId 进行单一约束,它看起来像这样:

// 1) drop constraint
queryInterface.removeConstraint('my_some_table', 'my_constraint');

// 2) rename column
queryInterface.renameColumn('my_some_table', 'totoId', 'toto_id');

// 3) add constraint back
queryInterface.addConstraint('my_some_table', ['toto_id'], {
type: 'unique',
name: 'my_constraint'
});

请记住,迁移应该是原子操作。 因此您应该按该顺序创建 3 个迁移。 或者甚至更好,正如@Santilli 在评论中指出的那样,您可以创建一个事务。如果其中一个查询失败,这将防止应用任何更改:

return queryInterface.sequelize.transaction(async (transaction) => {
await queryInterface.removeConstraint("my_some_table", "my_constraint", {
transaction,
});
await queryInterface.renameColumn("my_some_table", "totoId", "toto_id", {
transaction,
});
await queryInterface.addConstraint("my_some_table", ["toto_id"], {
type: "unique",
name: "my_constraint",
transaction,
});
});

此外,请记住创建一个事务来恢复 down 函数中的更改。

关于migration - Sequelize - 使用索引和约束重命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47755293/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com