반응형
Error synchronizing data with database
이유: SQL Error [42809]: 오류: "시퀀스명" 시퀀스를 바꿀 수 없음
시퀀스의 last_value(현재 값) 값을 직접 변경하려 했는데 위와 같은 에러가 발생했다.
◆ 에러 원인
이 에러는 ALTER TABLE 같은 명령으로 시퀀스를 변경하려고 했을 때 발생하는 전형적인 메시지인데
시퀀스는 테이블이 아니라 독립 객체이기 때문에 ALTER TABLE로 수정할 수 없었다.
◆ last value(현재 값) 변경 방법
PostgreSQL에서는 시퀀스 값을 바꾸려면 setval() 함수를 사용해야 한다.
SELECT setval('시퀀스명', 지정하려는 last value 값, is_called 설정);
setval()은 PostgreSQL에서 last value(현재 값)을 변경할 때 사용하는 함수인데
변경 시 is_called 옵션으로 last value(현재 값)이 실제로 nextval()을 통해 호출되었는지 여부도 함께 설정해야 한다.
즉, 다음 nextval() 호출 시 현재값을 쓸지, +1된 값을 쓸지에 관한 제어를 해 주어야 한다는 이야기이다.
물론 is_called 설정에 대한 생략이 가능은 하지만, 생략하게 되면 자동으로 is_called 값이 true로 설정된다.
예를 들어 시퀀스를 1000으로 변경한 뒤, 다음 nextval() 호출 시에 1000이 아닌 1001이 나오게 하고 싶으면 is_called를 false 설정해야 하며.
SELECT setval('시퀀스명', 1000, false);
다음 nextval() 호출 시 1000부터 나오게 하려면 is_called를 true 또는 생략해야 한다.
SELECT setval(' 시퀀스명 ', 1000, true);
SELECT setval(' 시퀀스명 ', 1000);
글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --
반응형
'데이터베이스 > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] 대소문자 구분 없이 문자열 치환 (REGEXP_REPLACE) (1) | 2025.07.04 |
---|---|
[PostgreSQL] FILTER WHERE 절을 이용한 집계함수 활용법 (0) | 2025.05.31 |
[PostgreSQL] 인코딩(encoding) 확인하기 (1) | 2024.10.23 |
[PostgreSQL] 인덱스(Index) 정보를 조회하기(pg_indexes) (1) | 2024.07.28 |
[PostgreSQL] 남은 연결 슬롯은 non-replication 슈퍼유저 연결용으로 남겨 놓았음 (0) | 2024.04.28 |