본문 바로가기

나는개발자다/기타

Postgresql 번호 자동 증가.

sql server와 다르게 좀 복잡하다.

많이 헤멨다.

구글링 해본 결과 테이블 생성할 때

 create table table_name(
no serial
 

이렇게 나와있는데 이렇게 하게 되면 no 의 값은 integer가 된다. 편하다.
근데 난 no 가 integer보단 bigint가 되길 원했다.
이 글을 쓰면서 컬럼 값 integer를 bigint로 변경해도 되겠구나.. 라고 생각이 났다.

여하튼 구글링을 더 해 본 결과 다른 방법을 찾았다.
Postgres는 sequence라는 일종의 procedure를 이용해서 번호를 자동증가하게 한다.

그래서 sequence를 만들어보자.

 CREATE SEQUENCE auto_increment_seq


여기서.. 

1. Table를 생성할 때.
2. 기존 테이블에 적용할 때. 이 두가지 경우를 가지고 생각해 보다.

1. Table를 생성할 때
 CREATE TABLE table_name(
                no bigint NOT NULL DEFAULT nextval('auto_increment_seq'::regclass)

** regclass는 잘 모르겠다. 일단 붙혀도 되고 안 붙혀도 된다. postgresql 9.0 기준이다.


2. 기존 테이블에 추가할 때.
 UPDATE table_name SET no = NEXTVAL('auto_increment_seq')



이상이다.

참고로 알아둬야 할 것이 있다.

SEQUENCE는 전역변수로 작동한다
즉 하나의 DATABASE에 모든 테이블의 no 값은 유일하다는 것이다. 새로운 테이블을 생성을 하던 기존 테이블을 삭제를 하던간에 최근의 값에 +1을 하게 된다.