[TypeORM] 마이그레이션 후 발생하는 not-null constraint 에러 해결하기

Song·2023년 8월 21일
0

오류일지

목록 보기
5/5

개요

TypeORM에서 제공하는 마이그레이션 인터페이스를 통해 테이블 이름을 변경했다.
그리고 데이터 값을 생성하는 쿼리를 실행하니 아래와 같이 QueryFailedError가 발생..!

고로 해당 테이블의 id는 typeORM에서 제공하는 어노테이션을 이용해 시퀀스를 통해 자동으로 생성될 수 있도록 설정해놓은 상태였다.

그렇기 때문에 not-null constraint 에러가 더욱 당황스러울 수 밖에 없었는데,
알고보니 테이블명을 변경하면서 id가 기존 시퀀스가 아닌 다른 이름의 시퀀스를 참조하려고하면서 id가 자동 생성되지 않았던 것이다.

해결방법

해결 방법은 매우 간단했다.
마이그레이션 스크립트에 seq 이름을 변경하려는 테이블명에 맞춰 수정하는 스크립트를 추가하면된다.
ALTER SEQUENCE old_table_name_id_seq RENAME TO new_table_name_id_seq;

시퀀스와 테이블은 별도 객체로 구분되기 때문에 테이블명을 업데이트한다고 시퀀스명이 변경되지 않는 점 참고!

참고할 점

테이블명을 바꾼다고 시퀀스 이름 또한 필수로 변경할 필요는 없다.
TypeORM은 DB에서 사용하는 naming convention을 기반으로 테이블과 컬럼명을 이용해 시퀀스를 참조하기 때문에 orm을 통해 쿼리가 한번 실행되고 나서는 자동으로 변경이 되기 때문이다.

하지만 처음부터 (시퀀스가 자동으로 반영되기 전부터) 변경된 테이블의 데이터를 생성해야하는 상황이 온다면
시퀀스도 같이 alter 해서 괜한 오류는 방지하는게 좋을 거 같다.

profile
Learn From Yesterday, Live Today, Hope for Tomorrow

0개의 댓글