반응형
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);




글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --
반응형