포스트를 저장하는 API에서 500번대 에러가 발생하였다. 에러 로그를 찍어보니 "QueryFailedError: dupliacte key value violates unique constraint "PK_eff3e46d24d416b52a7e0ae4159"라고 출력되었다.
TypeORM에서 @Entity를 통해 테이블을 생성하고, id 칼럼을 @PrimarayGeneratedColumn을 사용하여 primary key로 지정하고 unique value로 지정하고 PostgreSQL로 매핑하였는데 데이터를 복사하여 테이블로 이동시키면서 시퀀스 객체와 테이블의 키 값에 차이가 나면서 insert시 Duplicate key value violates unique constraint 에러가 발생된다.
1. Duplicate key error가 발생한 테이블의 최대 키 값을 찾아본다.
SELECT MAX(id) FROM 테이블명;
2. 시퀀스 객체 값을 확인한다.
SELECT nextval('테이블명_id_seq');
3. 시퀀스 객체 값을 테이블 키 값으로 변경한다.
SELECT setval('테이블명_id_seq', (SELECT MAX(id) FROM 테이블명));
위와 같이 시퀀스 객체 값과 테이블 키 값을 동일하게 하면, Duplicate key value error는 해결된다.
Duplicate key value violates unique constraint
포스트를 저장하는 API에서 500번대 에러가 발생하였다. 에러 로그를 찍어보니 "QueryFailedError: dupliacte key value violates unique constraint "PK_eff3e46d24d416b52a7e0ae4159"라고 출력되었다.
원인
TypeORM에서 @Entity를 통해 테이블을 생성하고, id 칼럼을 @PrimarayGeneratedColumn을 사용하여 primary key로 지정하고 unique value로 지정하고 PostgreSQL로 매핑하였는데 데이터를 복사하여 테이블로 이동시키면서 시퀀스 객체와 테이블의 키 값에 차이가 나면서 insert시 Duplicate key value violates unique constraint 에러가 발생된다.
해결 방법
1. Duplicate key error가 발생한 테이블의 최대 키 값을 찾아본다.
2. 시퀀스 객체 값을 확인한다.
3. 시퀀스 객체 값을 테이블 키 값으로 변경한다.
위와 같이 시퀀스 객체 값과 테이블 키 값을 동일하게 하면, Duplicate key value error는 해결된다.
'개발 > PostgreSQL' 카테고리의 다른 글