포시코딩

[Sequelize] migration을 이용한 Table 속성 변경 방법들 본문

Node.js

[Sequelize] migration을 이용한 Table 속성 변경 방법들

포시 2022. 12. 22. 15:43
728x90

개요

sequelize를 처음 사용하며 익숙하지 않아 겪는 여러 문제에 대해 직접 해보고 잘 적용된 방법들을 정리한 글

계속 추가될 예정이며 대부분의 기능들은 [공식문서 - queryInterface] 를 통해 직접 참고할 수 있다.

 

아래 내용들은 모두 migration 파일을 생성하여 진행하는 과정들이며

생성 방법과 실행 방법은 다음과 같다.

 

생성 방법

npx sequelize migration:generate --name test

실행 방법

npx sequelize db:migrate

 

컬럼명 변경

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    await queryInterface.renameColumn('Comments', 'content', 'comment');
  },
  async down (queryInterface, Sequelize) {
  }
};

'content' -> 'comment'

renameColumn('tableName', 'attrNameBefore', 'attrNameAfter')

 

https://sequelize.org/api/v6/class/src/dialects/abstract/query-interface.js~queryinterface#instance-method-renameColumn

 

QueryInterface | Sequelize

 

sequelize.org

 

속성 변경

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    await queryInterface.changeColumn('Comments', 'deletedAt', {
      type: Sequelize.DATE, 
      allowNull: true
    });
  },
  async down (queryInterface, Sequelize) {
    await queryInterface.changeColumn('Comments', 'deletedAt', {
      type: Sequelize.DATE, 
      allowNull: false,
    });
  }
};

deletedAt의 NOT NULL 속성을 Nullable하게 바꿔주는 방법

type 명시를 해야 migrate할 때 에러나지 않는다.

 

https://sequelize.org/api/v6/class/src/dialects/abstract/query-interface.js~queryinterface#instance-method-changeColumn

 

QueryInterface | Sequelize

 

sequelize.org

 

속성 제거

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    await queryInterface.removeColumn('테이블명', '제거할_컬럼명', {});
  },
  async down (queryInterface, Sequelize) {}
};
728x90