簡體   English   中英

在 Sequelize 上運行遷移會引發死鎖錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM