Database
PostgreSQL Insert 할 때 Seq 조정
hjkang
2023. 1. 4. 10:44
에러
- ERROR: duplicate key value violates unique constraint
원인
- nextval() 등을 통해 primary key를 생략한 채로 자동 시퀀스를 실행하다 보면 시퀀스 객체와 테이블 pk 값에 차이가 생기는 경우가 종종 발생
- primary key 값은 유니크해야 하는데 이미 존재하는 seq를 insert 하려고 하는 경우에 발생
해결
-- 오류 난 테이블의 최대 키 값 조회
select max(seq) from ${테이블명};
-- nextval 함수가 있는 시퀀스 객체 값 조회
select nextval('${시퀀스명}'::regclass);
-- 두 값이 불일치하는 경우 시퀀스 객체 값으로 변경
select setval('${시퀀스명}', (select max(seq) from ${테이블명}))