Node.js Sequelize addColumn迁移始终引用公共架构

Node.js Sequelize addColumn迁移始终引用公共架构,node.js,postgresql,express,sequelize.js,sequelize-cli,Node.js,Postgresql,Express,Sequelize.js,Sequelize Cli,我有一个Express应用程序,它使用Sequelize作为ORM,使用PostgreSQL作为数据库。 数据库的设置方式是,我的应用程序中的每个租户将具有不同的架构。我的应用程序中存在的迁移文件包含addColumn/removeColumn迁移。 但是,当我运行npx sequelize cli db:migrate命令时,会出现以下错误 错误:关系“public.table_name”不存在 上述错误仅针对包含addColumn/removeColumn迁移的迁移文件引发。 此外,我没有提

我有一个Express应用程序,它使用Sequelize作为ORM,使用PostgreSQL作为数据库。 数据库的设置方式是,我的应用程序中的每个租户将具有不同的架构。我的应用程序中存在的迁移文件包含addColumn/removeColumn迁移。 但是,当我运行npx sequelize cli db:migrate命令时,会出现以下错误

错误:关系“public.table_name”不存在

上述错误仅针对包含addColumn/removeColumn迁移的迁移文件引发。 此外,我没有提到公共模式(甚至从数据库中删除了公共模式)。 在Sequelize中有没有一种方法可以针对特定的模式(比如test_模式)运行迁移,而不必在迁移文件中硬编码模式名称

更新#2



上面是addColumn迁移的代码。

您可以使用addColumn/removeColumn的扩展语法,如下所示:

const { tableSchemas } = require('../config.json')
const tableName = 'table_name'
...
module.exports = {
  up: async(queryInterface, Sequelize) => {
    // adding transaction because we have several changes
    await queryInterface.sequelize.transaction(async transaction => {
      for (const tableSchema of tableSchemas) {
        const table = { schema: tableSchema, tableName: tableName }
        await queryInterface.addColumn(table, 'new_field_name', {
          type: Sequelize.INTEGER
        }, { transaction });
      }
    })
  },

  down: async(queryInterface, Sequelize) => {
    // adding transaction because we have several changes
    await queryInterface.sequelize.transaction(async transaction => {
      for (const tableSchema of tableSchemas) {
        const table = { schema: tableSchema, tableName: tableName }
        await queryInterface.removeColumn(table,'new_field_name', { transaction });
      }
    })
  }
};


请显示使用addColumn进行迁移的示例/removeColumn@Anatoly我已经用示例迁移更新了这个问题。请参阅。我正在寻找一种不在迁移文件中硬编码架构名称的方法。您可以在迁移文件中导入配置文件并使用其中的架构名称。我认为在我的情况下,这是不可能的,因为我需要对5个架构运行迁移。请分享您的想法5个架构名称的来源在哪里?现在我正在config.json文件中对架构进行硬编码
const { tableSchemas } = require('../config.json')
const tableName = 'table_name'
...
module.exports = {
  up: async(queryInterface, Sequelize) => {
    // adding transaction because we have several changes
    await queryInterface.sequelize.transaction(async transaction => {
      for (const tableSchema of tableSchemas) {
        const table = { schema: tableSchema, tableName: tableName }
        await queryInterface.addColumn(table, 'new_field_name', {
          type: Sequelize.INTEGER
        }, { transaction });
      }
    })
  },

  down: async(queryInterface, Sequelize) => {
    // adding transaction because we have several changes
    await queryInterface.sequelize.transaction(async transaction => {
      for (const tableSchema of tableSchemas) {
        const table = { schema: tableSchema, tableName: tableName }
        await queryInterface.removeColumn(table,'new_field_name', { transaction });
      }
    })
  }
};