fix: handle column not exists error
This commit is contained in:
		
							parent
							
								
									ab7c3fa98e
								
							
						
					
					
						commit
						a0cb35ffa4
					
				@ -26,13 +26,12 @@ export default class UpdateIdToBigIntMigrator extends Migration {
 | 
				
			|||||||
    const queryGenerator = queryInterface.queryGenerator as any;
 | 
					    const queryGenerator = queryInterface.queryGenerator as any;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const updateToBigInt = async (model, fieldName) => {
 | 
					    const updateToBigInt = async (model, fieldName) => {
 | 
				
			||||||
 | 
					      let sql;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      const tableName = model.tableName;
 | 
					      const tableName = model.tableName;
 | 
				
			||||||
      if (model.rawAttributes[fieldName].type instanceof DataTypes.INTEGER) {
 | 
					      if (model.rawAttributes[fieldName].type instanceof DataTypes.INTEGER) {
 | 
				
			||||||
        if (db.inDialect('postgres')) {
 | 
					        if (db.inDialect('postgres')) {
 | 
				
			||||||
          await this.sequelize.query(
 | 
					          sql = `ALTER TABLE "${tableName}" ALTER COLUMN "${fieldName}" SET DATA TYPE BIGINT;`;
 | 
				
			||||||
            `ALTER TABLE "${tableName}" ALTER COLUMN "${fieldName}" SET DATA TYPE BIGINT;`,
 | 
					 | 
				
			||||||
            {},
 | 
					 | 
				
			||||||
          );
 | 
					 | 
				
			||||||
        } else if (db.inDialect('mysql')) {
 | 
					        } else if (db.inDialect('mysql')) {
 | 
				
			||||||
          const dataTypeOrOptions = model.rawAttributes[fieldName];
 | 
					          const dataTypeOrOptions = model.rawAttributes[fieldName];
 | 
				
			||||||
          const attributeName = fieldName;
 | 
					          const attributeName = fieldName;
 | 
				
			||||||
@ -49,9 +48,18 @@ export default class UpdateIdToBigIntMigrator extends Migration {
 | 
				
			|||||||
              table: tableName,
 | 
					              table: tableName,
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
          const sql = queryGenerator.changeColumnQuery(tableName, query);
 | 
					          sql = queryGenerator.changeColumnQuery(tableName, query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          await this.sequelize.query(sql.replace(' PRIMARY KEY;', ' ;'), {});
 | 
					          sql = sql.replace(' PRIMARY KEY;', ' ;');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          await this.sequelize.query(sql, {});
 | 
				
			||||||
 | 
					        } catch (err) {
 | 
				
			||||||
 | 
					          if (err.message.includes('does not exist')) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          throw err;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.app.log.info(`updated ${tableName}.${fieldName} to BIGINT`, tableName, fieldName);
 | 
					        this.app.log.info(`updated ${tableName}.${fieldName} to BIGINT`, tableName, fieldName);
 | 
				
			||||||
@ -67,6 +75,12 @@ export default class UpdateIdToBigIntMigrator extends Migration {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        const primaryKeyField = model.tableAttributes[model.primaryKeyField];
 | 
					        const primaryKeyField = model.tableAttributes[model.primaryKeyField];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const collection = db.modelCollection.get(model);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!collection) {
 | 
				
			||||||
 | 
					          continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (primaryKeyField && primaryKeyField.primaryKey) {
 | 
					        if (primaryKeyField && primaryKeyField.primaryKey) {
 | 
				
			||||||
          await updateToBigInt(model, model.primaryKeyField);
 | 
					          await updateToBigInt(model, model.primaryKeyField);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user