我有一些表,其中之一称为 events
表。当我运行迁移时,一切看起来都不错,但是如果我撤消上次迁移,我的撤消迁移就会结束而没有任何错误。当我检查我的数据库时,我的表已重命名为 event_backup
,因此当我尝试迁移时出现错误,因为表 event
已重命名为 event_backup
并且表 event
不存在。
上次迁移文件:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface
.addColumn('temp', 'StudyId', {
type: Sequelize.UUID,
references: {
model: 'studies',
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL',
})
.then(() => {
return queryInterface.addColumn('temp', 'SubjectId', {
type: Sequelize.UUID,
references: {
model: 'subjects',
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL',
});
})
.then(() => {
return queryInterface.addColumn('events', 'SubjectId', {
type: Sequelize.UUID,
references: {
model: 'subjects',
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL',
});
})
.then(() => {
return queryInterface.addColumn('events', 'StudyId', {
type: Sequelize.UUID,
references: {
model: 'studies',
key: 'id',
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL',
});
});
},
down: queryInterface => {
return queryInterface
.removeColumn('temp', 'StudyId')
.then(() => {
queryInterface.removeColumn('temp', 'SubjectId');
})
.then(() => {
queryInterface.removeColumn('events', 'SubjectId').then(() => {
queryInterface.removeColumn('events', 'StudyId');
});
});
},
};
最佳答案
您没有在 Promise
语句中返回 then
。 events
表在迁移时临时重命名为 events_backup
。迁移完成后,您会返回 events
表,但由于没有返回 Promise
,您会遇到不完整的迁移。
要修复 undo
迁移,请在每个 return
之前添加 queryInterface.removeColumn
关键字。
现在,当您开始 undo
迁移时,您的 events
表将暂时重命名为 events_backup
,然后再次重命名为 events
表。
参见工作示例。
down: queryInterface => {
return queryInterface
.removeColumn('temp', 'StudyId')
.then(() => {
return queryInterface.removeColumn('temp', 'SubjectId');
})
.then(() => {
queryInterface.removeColumn('events', 'SubjectId').then(() => {
return queryInterface.removeColumn('events', 'StudyId');
});
});
},
有关 Sequelize 迁移的更多信息,请参阅此处的 docs 或此 amazing blog post 。
关于javascript - 当我撤消迁移 sequelize 删除我的表或重命名为 table_backup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53867226/