반응형
Manual | Sequelize
Migrations Just like you use version control systems such as Git to manage changes in your source code, you can use migrations to keep track of changes to the database. With migrations you can transfer your existing database into another state and vice ver
sequelize.org
0. npx 명령어 실행 시 Unable to resolve sequelize package ~.라고 뜬다면 package.json이 있는 경로에서 실행 할 것.
1. 모델 정의 또는 수정
npx sequelize model:generate --name [모델명] --attributes firstName:string,lastName:string,email:string
'use strict';
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('log_mng', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
username: {
type: Sequelize.STRING
},
ip: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
// await queryInterface.dropTable('log_mng');
}
};
2. 기존 테이블에 컬럼 추가 및 변경
npx sequelize migration:create --name [파일명]
- 단일 컬럼 추가 / 삭제
'use strict';
module.exports = {
/**
* 컬럼 추가
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async up(queryInterface, Sequelize) {
return queryInterface.addColumn("log_mng", "partname", {
type: Sequelize.STRING(200),
comment: '부서명'
});
},
/**
* 컬럼 삭제
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async down(queryInterface, Sequelize) {
return queryInterface.removeColumn("log_mng", "partname");
}
};
- 여러 컬럼 추가 / 삭제
'use strict';
module.exports = {
/**
* 컬럼 추가
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async up(queryInterface, Sequelize) {
return queryInterface.sequelize.transaction((t) => {
return Promise.all([
queryInterface.addColumn("los_term", "term_gbn", {
type: Sequelize.STRING(200),
comment: '용어_구분'
}, { transaction: t }),
queryInterface.addColumn("los_term", "unit", {
type: Sequelize.STRING(200),
comment: '단위'
}, { transaction: t })
])
});
},
/**
* 컬럼 삭제
* @param {*} queryInterface
* @param {*} Sequelize
* @returns
*/
async down(queryInterface, Sequelize) {
return queryInterface.sequelize.transaction((t) => {
return Promise.all([
queryInterface.removeColumn('los_term', 'term_gbn', { transaction: t }),
queryInterface.removeColumn('los_term', 'unit', { transaction: t })
])
})
}
};
- 컬럼 수정 / 취소
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
return queryInterface.changeColumn("tb_name", "col_name", {
type: Sequelize.STRING,
comment: '속성_ID'
});
},
down: async (queryInterface, Sequelize) => {
return queryInterface.changeColumn("tb_name", "col_name", {
type: Sequelize.STRING,
comment: '이전_속성_ID'
});
}
};
- 컬럼 외래키 추가 / 제거
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
return queryInterface.addConstraint("tb_name", {
fields: ['fk_col_id'],
type: 'foreign key',
name: 'fk_name',
references: {
table: 'p_tb_name',
field: 'id'
}
// onDelete: 'cascade',
// onUpdate: 'cascade'
});
},
down: async (queryInterface, Sequelize) => {
return queryInterface.removeConstraint("tb_name", "fk_name");
}
};
3. 마이그레이션 실행
npx sequelize db:migrate
dotenv 모듈을 사용해서 config 파일에 입력된 DB 정보로 migrate
- 개발 DB
npx sequelize db:migrate --env development
- 운영 DB
npx sequelize db:migrate --env production
* migration한 상태에서 내용 수정
1. migration 되돌리기. undo 실행 시 각 파일의 down에 정의된 코드가 실행 됨.
No executed migrations found. 라는 문구가 나오면 모두 되돌아 간 것.
npx sequelize db:migrate:undo // 작업 취소
npx sequelize db:migrate:undo:all //작업 모두 되돌리기
2. migration 파일과 model의 내용을 맞춘다.
3. migration 실행
npx sequelize db:migrate
반응형
'Nodejs > Sequelize' 카테고리의 다른 글
Sequelize Native Query - sequelize.query() 사용법 (0) | 2022.01.18 |
---|---|
nodejs sequelize (+postgis) geojson by extent (0) | 2021.08.06 |
Nodejs Sequelize + gdal 을 이용한 shp 업로드 (0) | 2021.06.15 |
Nodejs Express + Sequelize 기본 셋팅(Postgresql) (0) | 2021.03.31 |