[postgresql] PostgreSQL 기본 키를 1로 재설정

채워진 테이블에서 다시 1부터 시작하도록 PostgreSQL 테이블의 기본 키를 재설정하는 방법이 있습니까?

지금은 1000000 이상에서 숫자를 생성하고 있습니다. 모든 기존 데이터를 그대로 유지하면서 모두 재설정하고 1로 시작하기를 원합니다.



답변

https://stackoverflow.com/a/5272164/5190 에서 더 나은 옵션을 참조하십시오.

자동 증가하는 기본 키 (즉, 데이터 유형이있는 열 serial primary key)는 시퀀스 와 연결됩니다 . setval(<seqname>, <next_value>)함수를 사용하여 시퀀스의 다음 값을 설정할 수 있습니다 . 실제로 자체적으로 함수를 실행하려면 다음 SELECT과 같이 를 사용해야 합니다.SELECT setval(<seqname>, <next_value>)

직렬을 사용할 때 자동 생성 된 시퀀스의 이름은 다음과 같습니다. <table>_<column>_seq


답변

시퀀스를 재설정하여 번호 1로 다시 시작하는 가장 좋은 방법은 다음을 실행하는 것입니다.

ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1

따라서 예를 들어 users테이블의 경우 다음과 같습니다.

ALTER SEQUENCE users_id_seq RESTART WITH 1


답변

@bluish는 실제로 자동 증가 기본 키를 사용하여 새 레코드를 삽입하는 것은 다음과 같이 명시 적으로 시퀀스를 사용하는 것과 같습니다.

INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)

따라서 첫 번째 ID를 1로 설정하려면 시퀀스를 0으로 설정해야합니다.하지만 범위를 벗어 났으므로 ALTER SEQUECE 문을 사용해야합니다. 예를 들어 테이블 메뉴에 number라는 직렬 필드가있는 경우 :

ALTER SEQUENCE menu_number_seq RESTART

일을 완벽하게 만들 것입니다.


답변