Node.js Sequelize addColumn迁移始终引用公共架构
我有一个Express应用程序,它使用Sequelize作为ORM,使用PostgreSQL作为数据库。 数据库的设置方式是,我的应用程序中的每个租户将具有不同的架构。我的应用程序中存在的迁移文件包含addColumn/removeColumn迁移。 但是,当我运行npx sequelize cli db:migrate命令时,会出现以下错误 错误:关系“public.table_name”不存在 上述错误仅针对包含addColumn/removeColumn迁移的迁移文件引发。 此外,我没有提到公共模式(甚至从数据库中删除了公共模式)。 在Sequelize中有没有一种方法可以针对特定的模式(比如test_模式)运行迁移,而不必在迁移文件中硬编码模式名称 更新#2Node.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迁移的迁移文件引发。 此外,我没有提
上面是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 });
}
})
}
};