2011-07-04 2 views
12

하나의 DB에서 다른 DB로 테이블 데이터를 복사하는 스크립트가 있지만 ID 열은 시퀀스에 의해 백업되므로 새로운 레코드가 대상 테이블에 삽입 될 때 nextval(seq) 잘못된 값을 반환하고 있습니다.nextval이 next unused id가되도록 다시 시작

다음 사용 가능한 ID에서 시작되도록 시퀀스를 업데이트해야합니다. 위의 내용 그러나 구문 오류가 발생

ALTER SEQUENCE seq_id RESTART WITH 
    (SELECT MAX(id) FROM tbl); 

:

내가 좋아하는 일을하고 싶습니다.

누구나 다른 방법을 제안 할 수 있습니까?

답변

9
DO $$ 
    SELECT INTO m MAX(id) FROM tbl; 
    EXECUTE 'ALTER SEQUENCE seq_id RESTART WITH ' || m; 
END$$; 

또는 더 나은 아직,이 질문을 참조하십시오 답에 대한

+0

덕분에, 에코는 psql 프로그램에 파이프로 내가 이것을 실행 해요 .. 당신이 말해 줄 수 전체 명령을 어떻게 하나로 탈출 시키는가? – pstanton

+0

'alter sequence' 문을 동적으로 만들 필요없이'setval' 함수를 사용할 수 있습니다; 더 간단하지만, 당신이 이것들을 하나씩하는 것이라면 어떤 실질적인 변화도 가져 오지 않습니다. – araqnid