Sequelize 마이그레이션을 사용하여 null이 아닌 고유한 새 열 추가
non-null
마이그레이션을 사용하여 기존 관계형 데이터베이스에 새 unique
및 sequelize
열을 추가하는 방법을 설명합니다.Note: This is for development environments and not recommended for production.
때때로 응용 프로그램을 작성하는 동안 현재 테이블을 삭제하지 않고 기존 데이터베이스에 null이 아닌 고유한 새 열을 추가해야 할 수 있습니다. 한 곳에서 완벽한 솔루션을 찾을 수 없었기 때문에 여기에서 이 문제를 해결하려고 시도합니다.
문제 설명
다음 열이 있는
users
테이블이 있고 이제 테이블을 삭제하지 않고 고유하고 null이 아닌 새username
열을 추가하려고 합니다.| id | name | email | age | hobby |
|----|-------|-----------------------|-----|---------|
| 1 | bob | [email protected] | 23 | coding |
| 2 | alice | [email protected] | 25 | dance |
| 3 | John | [email protected] | 22 | singing |
| 4 | frank | [email protected] | 28 | reading |
해결책
한 가지 간단한 해결책은
email
열에 동일한 username
필드를 삽입하는 것인데 둘 다 고유하기 때문에 이것이 가능하지 않은 일반적인 예를 들어 보겠습니다.sequelize-cli
를 사용하여 마이그레이션 파일을 만들어 시작해 보겠습니다.npx sequelize migration:create --name=add_username_users
의사 코드의 화면 캡처는 다음과 같습니다.
설명하기 위해 먼저
username
열을 성공에 대한 제약 조건으로 추가하고 원하는 논리로 새로 추가된unique
열의 모든 행을 업데이트하는 논리를 작성합니다. 나는 username
쿼리에서 { type: QueryTypes.SELECT }
를 사용했습니다. 여기에는 메타데이터가 필요하지 않고 쿼리 결과를 성공 시 배열로 가져오려면 열이 SELECT
제약 조건을 추가하도록 변경됩니다. Sequelize 마이그레이션의 다운 부분에서는 not-null
열만 삭제됩니다.다음은 임의로 생성된 사용자 이름으로 새 열을 추가하는 최종 코드입니다. 나중에 업데이트하거나 개발 환경 중에 그대로 유지할 수 있습니다.
const { QueryTypes } = require('sequelize');
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn('users','username',{
type: Sequelize.STRING,
unique: true
}).then((data) => {
queryInterface.sequelize
.query(`SELECT id from users`, {
type: QueryTypes.SELECT
})
.then((rows) => {
rows.map((row) => {
queryInterface.sequelize.query(
`UPDATE users SET username='${Math.random()
.toString(36).substr(2, 8)}' WHERE id=${row.id};`
);
});
Promise.resolve();
})
.then(() => {
queryInterface.changeColumn('users', 'username', {
type: Sequelize.STRING,
allowNull: false
});
});
})
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('users', 'username');
}
};
읽어주셔서 감사하고 이에 대한 의견을 공유해 주세요.
참조:
무작위 생성: stackOverflow answer
코드 아이디어: sequelize github issue
Reference
이 문제에 관하여(Sequelize 마이그레이션을 사용하여 null이 아닌 고유한 새 열 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rohit_ambre/add-new-non-null-unique-column-using-sequelize-migration-1bh3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)