[英]Running a migration on Sequelize is throwing a deadlock error
所以,我的項目有一個使用 Sequelize 設置的 MySQL 數據庫,后端是用 nodeJS 編寫的。 我正在嘗試對我的數據庫執行簡單的遷移,向 4 個不同的表添加一個新列。
當我運行遷移時,我收到以下錯誤:
== 20210419115251-add-duplication-of-column-feature: migrating =======
ERROR: Deadlock found when trying to get lock; try restarting transaction
這是我的代碼:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.addColumn('Forms', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'state'
}),
queryInterface.addColumn('FormFields', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'reconcileType'
}),
queryInterface.addColumn('FormFieldsOptions', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'height'
}),
queryInterface.addColumn('FormFieldsLogics', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'data'
})
]);
},
down: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.removeColumn('Forms', 'duplicationOf'),
queryInterface.removeColumn('FormFields', 'duplicationOf'),
queryInterface.removeColumn('FormFieldsOptions', 'duplicationOf'),
queryInterface.removeColumn('FormFieldsLogics', 'duplicationOf')
]);
}
};
我錯過了什么? 非常感謝提前
嘗試用 Sequelize 事務包裝它,以確保一切都成功執行,如下所示:
您可以在此處的文檔頁面上找到它。
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.sequelize.transaction(t => {
return Promise.all([
queryInterface.addColumn('Forms', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'state'
}, { transaction: t }),
queryInterface.addColumn('FormFields', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'reconcileType'
}, { transaction: t }),
queryInterface.addColumn('FormFieldsOptions', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'height'
}, { transaction: t }),
queryInterface.addColumn('FormFieldsLogics', 'duplicationOf', {
type: Sequelize.INTEGER,
after: 'data'
}, { transaction: t })
]);
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.sequelize.transaction(t => {
return Promise.all([
queryInterface.removeColumn('Forms', 'duplicationOf', { transaction: t }),
queryInterface.removeColumn('FormFields', 'duplicationOf', { transaction: t }),
queryInterface.removeColumn('FormFieldsOptions', 'duplicationOf', { transaction: t }),
queryInterface.removeColumn('FormFieldsLogics', 'duplicationOf', { transaction: t })
]);
});
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.