게시글을 등록하려는 경우 평소에는 잘되다가 갑자기 아래와 같은 에러로 ,
a_table에 이미 a_sn 값이 존재한다고 한다.
하지만 sn 값은 nextval() 과 해당 테이블의 시퀀스를 이용하였기 때문에 왜 중복현상이 일어나는지 ..
INSERT INTO a_table(a_sn, a_nm, a_expln)
VALUES(nextval('seq_a_table'),#{aNm}, #{aExpln})
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "a_table" Detail: Key (a_sn)=(21) already exists.
nextval('seq_a_table')을 통해 시퀀스에서 다음 값을 가져오려고 했지만, 이 시퀀스가 반환한 값(21)이 a_sn에 이미 존재하는 값이다.
이는 시퀀스의 현재 값이 데이터베이스 내의 a_sn 최대값보다 낮거나 같다는 것을 의미합니다.
보통의 경우 spring 을 통해 데이터베이스와 상호작용하여 데이터 관리를 해야 한다. 하지만 테스트 할 때 종종 DB에서 직접 데이터 조작 할 경우 데이터의 무결성이 깨질 수 있다.
select max(a_sn)
from a_table
SELECT NEXTVAL('seq_a_table');
SELECT setval('seq_a_table', COALESCE((SELECT MAX(a_sn) FROM a_table), 0)::bigint);
머싯습니다!