마이그레이션 변경 열을 FK로 후속 처리한 후 실패 취소
Column을 string(enum에서)으로 변경하고 다른 테이블을 참조하기 위해 마이그레이션 파일을 작성하려고 합니다.
const enumStatus = ['PENDING', 'SUCCESSFUL', 'FAILED', 'FAILED_LAST_VALUE_MISSING', 'FAILED_LAST_DATE_MISSING', 'FAILED_OLD_LAST_DATE'];
module.exports = {
up: async(queryInterface, Sequelize) => {
return Promise.all([
queryInterface.changeColumn('MeasurementTestResults', 'status', {
type: Sequelize.STRING,
allowNull: false
}), queryInterface.addConstraint('MeasurementTestResults', {
fields: ['status'],
type: 'foreign key',
name: 'statusFk',
references: {
table: 'MeasurementTestResultStatusEnums',
field: 'code'
},
onDelete: 'cascade',
onUpdate: 'cascade'
})
]);
},
down: async(queryInterface, Sequelize) => {
return Promise.all([
queryInterface.removeConstraint('MeasurementTestResults', 'statusFk'),
queryInterface.changeColumn('MeasurementTestResults', 'status', {
type: Sequelize.ENUM(...enumStatus),
allowNull: false
})
]);
}
};
db:db:db:db:db:db를 호출하려고 하면 명령이 제대로 실행되지 않습니다.
== 20201217194748-measurementTestResult_changeColumn_status: reverting =======
Executing (default): SELECT CONSTRAINT_CATALOG AS constraintCatalog, CONSTRAINT_NAME AS constraintName, CONSTRAINT_SCHEMA AS constraintSchema, CONSTRAINT_TYPE AS constraintType, TABLE_NAME AS tableName, TABLE_SCHEMA AS tableSchema from INFORMATION_SCHEMA.TABLE_CONSTRA
INTS WHERE table_name='MeasurementTestResults' AND constraint_name = 'statusFk' AND TABLE_SCHEMA = 'iot_crcm_application_data1';
Executing (default): ALTER TABLE `MeasurementTestResults` CHANGE `status` `status` ENUM('PENDING', 'SUCCESSFUL', 'FAILED', 'FAILED_LAST_VALUE_MISSING', 'FAILED_LAST_DATE_MISSING', 'FAILED_OLD_LAST_DATE') NOT NULL;
Executing (default): ALTER TABLE `MeasurementTestResults`
DROP FOREIGN KEY `statusFk`;
ERROR: (conn=143438, no: 1832, SQLState: HY000) Cannot change column 'status': used in a foreign key constraint 'statusFk'
sql: ALTER TABLE `MeasurementTestResults` CHANGE `status` `status` ENUM('PENDING', 'SUCCESSFUL', 'FAILED', 'FAILED_LAST_VALUE_MISSING', 'FAILED_LAST_DATE_MISSING', 'FAILED_OLD_LAST_DATE') NOT NULL; - parameters:[]
그리고 나서 제가 제거하려고 할 때queryInterface.removeConstraint('MeasurementTestResults', 'statusFk'),
다운스크립트의 이 대사는, 작동하지만, 오류가 발생하기 전에는 안 됩니다.
다음을 사용하여 서로 종속된 구조 변경을 병렬로 실행하려고 하지 마십시오.Promise.all
그들에게 한 명씩 전화하는 것이 좋을 것입니다.
await queryInterface.removeConstraint('MeasurementTestResults', 'statusFk')
await queryInterface.changeColumn('MeasurementTestResults', 'status', {
type: Sequelize.ENUM(...enumStatus),
allowNull: false
})
마찬가지로up
방법도.
언급URL : https://stackoverflow.com/questions/65348686/sequelize-migration-changing-column-to-be-fk-and-then-undo-failing
'programing' 카테고리의 다른 글
Firestore에서 모든 하위 컬렉션과 중첩된 하위 컬렉션이 있는 문서 삭제 (0) | 2023.06.14 |
---|---|
Firebase 캐시를 바이패스하여(Android 앱에서) 데이터를 새로 고치는 방법은 무엇입니까? (0) | 2023.06.14 |
기본 쿼리에서 다중 위치 절이 작동하지 않는 이유 (0) | 2023.06.14 |
URL에서 마지막 슬래시 이후의 모든 항목을 가져오는 방법은 무엇입니까? (0) | 2023.06.14 |
'List' 유형은 'List' 유형의 하위 유형이 아닙니다. (0) | 2023.06.14 |