Database

PostgreSQL Insert 할 때 Seq 조정

hjkang

에러

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

 

'Database' 카테고리의 다른 글

PostgreSQL 함수(Function)  (0) 2023.05.10
PostgreSQL GIN Index  (0) 2023.01.30
PostgreSQL 테이블 소유자 변경  (0) 2023.01.11
PostgreSQL 테이블 청소  (0) 2022.12.21
인메모리 데이터베이스(Redis)  (0) 2022.10.23