위 sequence 개체를 사용하는 경우, 몇 가지 불편한 점이 있습니다. 미리 시퀀스를 만들어야 하며, 테이블을 만들 때, 긴 칼럼 정의를 해야하고, 테이블을 지울 때, 시퀀스도 따로 지워야 합니다. 이런 불편함을 해결 하기 위에서 PostgreSQL에서는 serial 이라는 자료형을 제공하고 PRIMARY KEY 지정해주면 자동증가 가능합니다.
CREATETABLE foo2 (
id serial PRIMARY KEY ,
NAME CHARACTERVARYING(255)
)
insertinto foo2 (name) values ('홍길동');
insertinto foo2 (id, name) values (1,'홍길동');
insertinto foo2 (id, name) values (default,'홍길동');
이렇게 독립된 sequence개체를 이용하는 방법보다 간단하고, 테이블 삭제 때 신경 쓸 부분이 적습니다. 위의 구문은 전부 오류가 발생되지 않으며, id 값을 강제로 입력하여 저장도 가능합니다. 이로 인해 id 필드 값에 중복값이 발생될수 있습니다.
GENERATED ALWAYS AS IDENTITY
그런데, 이 serial자료형을 사용하는 일련 번호 처리는 표준 SQL이 아닙니다. ANSI SQL 2003 규약은 이 일련 번호 처리를 위한 구문으로
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
Postgres 10부터는 SQL 표준에 정의 된 자격 증명 열도 지원합니다.
always 를 사용한 예제 입니다. 4번째 insert 구문에서 직접 id 필드에 값을 할당할 경우 오류가 발생됩니다.