QueryFailedError: Duplicate key value violates unique constraint

aborile·2024년 3월 25일
0

삽질기

목록 보기
9/9


예전에 회사에서 일을 하다가 prod에서는 데이터가 정상적으로 저장 되는데 dev에서만 이따금씩 에러가 나면서 저장이 되다 안 되다 했던 적이 있다. 헐레벌떡 서버 개발자 분께 제보했더니 '아... 그거 지금 원래 그래요. 데이터 덤프 떴더니... 코드는 변경사항 없고 prod에서는 잘 될 테니까 일단은 신경 쓰지 마세요'라는 대답을 들었더랬다.

그때는 그냥 그런가보다, 괜찮다고 하시니 괜찮나보다 하고 넘겼는데, 몇 년 뒤 개인 프로젝트를 하다가 동일한 상황이 발생하였다 wow. 그때 그 분은 어떻게 해결하셨던 걸까?

에러 메시지에서도 알 수 있듯, 에러 원인 자체는 duplicate key이다. 저장할 때에 unique constraint에 걸려 실패한 건데, 그렇다면 duplicate key는 왜 발생하게 된 걸까?

바로 데이터를 강제로 복사하면서 DB에서 자체적으로 관리하던 key 값과 실제로 테이블에 저장되어 있는 key 값이 차이가 나기 때문이다. 따라서 DB에 저장된 key 값에 대한 시퀀스(자동으로 순차적으로 증가하는 순번) 객체 값의 차이를 확인하고 수정해 주면 해결된다.

# '테이블명'에 대한 id 시퀀스 객체의 값을 확인
SELECT nextval('테이블명_id_seq');

# 현재 '테이블명'에 있는 id 최댓값 확인
SELECT MAX(id) FROM 테이블명;

# '테이블명'의 id 시퀀스 객체 값 변경
SELECT setval('테이블명_id_seq', 최대_id_값);
# 또는
SELECT setval('테이블명_id_seq', (SELECT MAX(id) FROM 테이블명));
profile
기록하고 싶은 것을 기록하는 저장소

0개의 댓글