2014-12-05 5 views
3

Postgres 9.3 테이블에서 integer을 기본 키로 사용하고 자동 시퀀스가 ​​증가하지만 최대 값은 integer에 도달했습니다. integer에서 serial (으)로 변환하는 방법?
내가 시도 :기본 키를 정수에서 직렬로 변환하는 방법은 무엇입니까?

ALTER TABLE my_table ALTER COLUMN id SET DATA TYPE bigint; 

을하지만 같은 데이터 유형 대신 bigintserial 작동하지 않습니다. serial으로 변환 할 수없는 것 같습니다.

+1

"하지만 작동하지 않습니다."는 적절한 문제 설명이 아닙니다. – zerkms

+0

@zerkms 죄송합니다, 대문자로 변환했습니다.하지만 차이가있을 경우 serialize하고 싶습니다. – Damir

+0

기본 키를 'bigint'로 변환 할 수 있었으면 첫 번째 값이 될 시퀀스의 기본값을 추가하십시오 –

답변

9

serial의사 데이터 형식이 아닌 실제의 데이터 형식이다. 일부 추가 DDL 명령을 자동으로 실행하여 아래에 integer이 있습니다.

  1. 시퀀스를 만듭니다 (기본적으로 일치하는 이름으로).
  2. NOT NULL을 설정하고 해당 시퀀스에서 기본값을 가져옵니다.
  3. 열을 "소유"로 만듭니다.

세부 사항 :

bigserialbigint 열 중심으로, 동일합니다. bigint을 원하지만 이미 달성했습니다. 기존 serial 열을 bigserial (또는 smallserial)으로 변환하려면 ALTER에 열의 데이터 형식을 입력하면됩니다. 시퀀스는 일반적으로 bigint을 기반으로하므로 integer 유형에는 동일한 시퀀스를 사용할 수 있습니다.

실제 데이터 유형이 여전히 integer입니다 :

은 그냥 손으로 나머지해야 "변화"는 bigserialbigint 또는 serial로의 integer에/bigint. serial에 대한 모든 조건이 충족되는 경우 pgAdmin과 같은 일부 클라이언트는 역 엔지니어링 된 CREATE TABLE 스크립트에 데이터 유형 serial을 표시합니다.