2012-12-14 4 views
1

에 innumerate 행 ID 재 내가 내 테이블에 ID 열이 : 표 1, 10, 11, 12과 같이 일관성이 아이디의를 가져 삭제 일부 행 후PostgreSQL의 : 테이블

id  BIGSERIAL NOT NULL PRIMARY KEY, ... 

... 즉, 실제 행 수는 pg의 시리얼 ID와 함께 사용되지 않습니다. 어떻게 든 행을 다시 번호 매김해야한다고 생각했습니다. 맞습니까?

+0

왜 모든 행의 번호를 다시 지정 하시겠습니까? – willglynn

+0

흠. 9 번 삭제 한 후에 1을 쓰면 10 대신 2가 나오기 때문에. – juk

+6

아니요, PostgreSQL의'serial'과'bigserial'은 그렇게 작동하지 않습니다. 당신의'id'는 행 번호가 아니며 그렇게 생각하지 않아야합니다. 테이블 당 고유 한 불투명 한 값일뿐입니다. –

답변

2

gapless 순차 식별자를 사용하려면 SERIAL 또는 BIGSERIAL (SEQUENCE)을 사용하지 마십시오. 이것은 FAQ입니다. 시퀀스는 삭제 된 ID를 재사용하지 않을뿐만 아니라 트랜잭션이 롤백 될 때 또는 DB의 불결한 재시작 후에 ID가 삭제되기 때문에 삭제하지 않은 경우에도 간격을 가질 수 있습니다.

"postgresql gapless sequence"를 검색하십시오.

약간 씁니다.이 here입니다.

합성 키를 사용하는 경우 ID가 다른 키와 같은지 여부 만 고려해야합니다. "A와 B 사이에 얼마나 많은 ID가 있는지"를 말하기 위해 비교하려고 시도하지 마십시오. SEQUENCE으로 생성 된 ID에서는 의미가 없습니다.