我有一些表,其中之一称为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');
});
});
},
};
答案 0 :(得分:0)
您不会在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');
});
});
},
有关顺序迁移的更多信息,请参见此处的docs或此amazing blog post。