PostgreSQL에서는 전통적으로 어떤 숫자를 차례대로 사용할 경우, 시퀀스 SEQUENCE 라는 개체를 사용했습니다.
-- 시퀀스 생성
CREATE SEQUENCE seq_ttt;
-- 테이블 생성
CREATE TABLE tbl_ttt_seq
(
seq int not null default nextval('seq_ttt') --시퀀스 매칭
, a varchar(10)
);
-- 테이블 삭제시 시퀀스도 같이 삭제 처리
ALTER SEQUENCE seq_ttt OWNED BY tbl_ttt_seq.seq;
insert into tbl_ttt_seq (a) values ('aaa');
insert into tbl_ttt_seq (a) values ('bbb');
insert into tbl_ttt_seq (a) values ('ccc');
insert into tbl_ttt_seq (a) values ('ddd');
insert into tbl_ttt_seq (a) values ('eee');
insert into tbl_ttt_seq (id,a) values (default,'eee');
--select * from tbl_ttt_seq
-- 자동적으로 테이블과 시퀀스가 삭제됩니다.
drop table tbl_ttt_seq;
위 sequence 개체를 사용하는 경우, 몇 가지 불편한 점이 있습니다. 미리 시퀀스를 만들어야 하며, 테이블을 만들 때, 긴 칼럼 정의를 해야하고, 테이블을 지울 때, 시퀀스도 따로 지워야 합니다. 이런 불편함을 해결 하기 위에서 PostgreSQL에서는 serial 이라는 자료형을 제공하고 PRIMARY KEY 지정해주면 자동증가 가능합니다.
CREATE TABLE foo2 (
id serial PRIMARY KEY ,
NAME CHARACTER VARYING(255)
)
insert into foo2 (name) values ('홍길동');
insert into foo2 (id, name) values (1,'홍길동');
insert into foo2 (id, name) values (default,'홍길동');
이렇게 독립된 sequence 개체를 이용하는 방법보다 간단하고, 테이블 삭제 때 신경 쓸 부분이 적습니다. 위의 구문은 전부 오류가 발생되지 않으며, id 값을 강제로 입력하여 저장도 가능합니다. 이로 인해 id 필드 값에 중복값이 발생될수 있습니다.