포시코딩

[Sequelize] 이미 생성한 테이블의 컬럼 속성 변경하기 본문

Node.js

[Sequelize] 이미 생성한 테이블의 컬럼 속성 변경하기

포시 2022. 12. 22. 13:10
728x90

개요

Comments 테이블을 생성했는데 깜빡하고 deletedAt 컬럼에 allowNull: true를 안줘버렸다.

원래 같았으면 테이블을 삭제하고 다시 만들었을텐데

FK 설정 등 해당 테이블에 대해 진행한게 벌써 좀 많아져서

간단히 삭제하고 다시 만들 수 없는 상황이었다.

sequelize가 아니었으면 alter 써서 변경해주면 끝이었을텐데 하며

sequelize에서 지원하는 기능을 찾아봤고 다행히 존재했다.

 

방법

먼저 migration file을 만든다.

npx sequelize migration:generate --name change-column

만들어진 js 파일에서 아래와 같이 수정해준다.

'use strict';

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    /**
     * Add altering commands here.
     *
     * Example:
     * await queryInterface.createTable('users', { id: Sequelize.INTEGER });
     */
    await queryInterface.changeColumn('Comments', 'deletedAt', {
      type: Sequelize.DATE, 
      allowNull: true
    });
  },

  async down (queryInterface, Sequelize) {
    /**
     * Add reverting commands here.
     *
     * Example:
     * await queryInterface.dropTable('users');
     */
    await queryInterface.changeColumn('Comments', 'deletedAt', {
      type: Sequelize.DATE, 
      allowNull: false,
    });
  }
};

up에는 변경을 적용할 내용이 들어가고, down에는 변경 전 내용이 들어가야 하는데

변경을 했다가 변경 사항을 롤백하려고 하는 경우 down이 쓰이게 된다.

 

아무튼 코드 설명을 더 하자면 'Comments' 테이블(DB에 있는 테이블 이름 그대로)의 'deletedAt' 컬럼에 대해

allowNull 을 변경해주는 모습이다.

이상하게 type을 같이 써주지 않으니 에러가 나면서 적용이 안되서 type도 같이 명시해주었다.

 

작성을 마친 후 저장한뒤에 아래 명령어를 통해 DB에 적용하여 확인해주면 변경사항이 적용된 것을 볼 수 있다.

npx sequelize db:migrate
728x90