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 ${테이블명}))