Error code 모음/1. SQL errors

[PostgreSQL Error] duplicate key value violates unique constraint

쟈누이 2020. 10. 30. 11:45
반응형

 

에러 발생 이유

PostgreSQL 에서는 nextval( ) 등을 통해 primary key 를 생략한 채로 자동 시퀀스를 실행하다보면

primary key 자동으로 번호가 지정되는 경우가 있는데, 

대게는 unique value 로 번호가 지정이 된다고 한다. 

하지만, 데이터 복사 등의 데이터에 변경이 일어나는 모종의 이유로 

시퀀스 객체와 테이블의 키 값에 차이가 생기는 경우가 종종 발생하는데, 이런 경우에는

primary key 를 생략한 채로 insert 를 할 경우에는 

postgresql 에서 이를 인지하고 오류를 발생시킨다고 한다.

 

ERROR:  duplicate key value violates unique constraint "table_pkey"

 

해결방법

1. 오류가 난 테이블의 최대 키 값을 조사한다

- 아무 컬럼이나 지정을 해도 상관은 없는 것 같다

나의 경우에는 아래와 같이 처음에 나왔다

SELECT MAX(id) FROM table;

 

2. 이어 nextval 함수가 있는 시퀀스 오브젝트 값을 확인한다.

아래와 같이 나왔다.

SELECT nextval('table_id_seq');

 

1번과 2번을 비교해보았을 때, 갯수에서 일치하지 않는 것을 확인할 수 있다.

nextval( )  을 도중에 생성을 했기 때문에 아래 에러가 발생을 한것 같다

만약에 두 값이 일치한다면 문제가 없다.

ERROR:  duplicate key value violates unique constraint "table_pkey"

 

3. 두 값이 불일치하는 경우 시퀀스 오브젝트 값을 테이블 컬럼 값으로 변경해준다.

변경 후 아래와 같이 갯수가 변경이 되었으며 에러는 완전히 사라졌다.

SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));

 

다음은 위 답을 얻는데 참고한 링크들이다.

 

참고링크

www.dreampharos.com/2019/12/postgresql-insert-pk.html

 

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

PostgreSQL에서 Entity Framework를 사용해서 DB조작할 때 에러에 대한 메모. id컬럼을 Serial형(Auto Increasing)으로 만든 테이블에 id 값을 생략한 형식으로 INSERT를 하려고 했더니 다음과 같은 에러가...

www.dreampharos.com

하기 링크는 일본어로 되어있지만, 번역을 한경우에 한국어로 영어에 비해선 번역이 잘 되서

쉽게 읽을 수 있을 것이다.

www.xmisao.com/2014/06/07/duplicate-key-value-violates-unique-constant-primary-key-on-postgresql.html

 

PostgreSQLでINSERT時に自動採番の主キーが重複してエラーが出る場合の対処法 -- ぺけみさお

 

www.xmisao.com

 

 

(만약 콘텐츠가 조금이나마.. 도움이 되었다면

광고 한번만 부탁드려도 될까요? ㅎㅎ)

반응형