如何解决如果外键约束处于活动状态,则通过顺序迁移来更改表的过程
我们在nodejs项目中使用sequelize和Umzug进行所需的数据库更改。非常重要的一点是,在我们讨论解决方案的多个有效使用实例的迁移时,数据库之间的所有数据都应能够从一个版本迁移到另一个版本。
只要没有外键约束,Sequelize就能很好地发挥作用。
在我们的场景中,我们有一个现有的表“ devices”,该表的外键约束设置为另一个表“ basedata”->“ id”。现在,我需要删除表“ devices”中的一个非null约束。我尝试使用以下迁移脚本执行此操作:
const { Sequelize } = require('sequelize');
module.exports = {
up: async (queryInterface) => {
await queryInterface.changeColumn('devices','basedataId',{
type: Sequelize.BIGINT,allowNull: true,references: {
model: 'basedata',key: 'id'
}
});
}
};
<rejected> ForeignKeyConstraintError [SequelizeforeignKeyConstraintError]: sqlITE_CONSTRAINT: FOREIGN KEY constraint Failed
at Query.formatError (C:\....\node_modules\sequelize\lib\dialects\sqlite\query.js:366:18)
at Query._handleQueryResponse (C:\....\node_modules\sequelize\lib\dialects\sqlite\query.js:72:18)
at Statement.afterExecute (C:\....\node_modules\sequelize\lib\dialects\sqlite\query.js:246:27) {
parent: [Error: sqlITE_CONSTRAINT: FOREIGN KEY constraint Failed] {
errno: 19,code: 'sqlITE_CONSTRAINT',sql: 'DROP TABLE `devices`;'
},original: [Error: sqlITE_CONSTRAINT: FOREIGN KEY constraint Failed] {
errno: 19,sql: 'DROP TABLE `devices`;',parameters: undefined,fields: undefined,table: undefined,value: undefined,index: undefined,reltype: undefined
}
}
} reason: SequelizeforeignKeyConstraintError: sqlITE_CONSTRAINT: FOREIGN KEY constraint Failed
在我看来,sequelize会构建更改后的表,并在将新表重命名为旧名称之前尝试删除现有表。由于不再满足约束条件,因此失败。
问题:解决我必须迁移/更改具有外键约束的现有表的情况的预期方法是什么?
最好的问候
BoxSon
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。