Postgresql 자동 증가
- Sequence
- Serial
- GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
Sequence
생성
CREATE SEQUENCE tn_user_id_seq;
테이블 생성
CREATE TABLE tn_user_seq (
id BIGINT NOT NULL DEFAULT NEXTVAL('tn_user_id_seq') PRIMARY KEY,
name VARCHAR(255),
created_date TIMESTAMP,
modified_date TIMESTAMP
);
Sequence 수정
ALTER SEQUENCE tn_user_id_seq OWNED BY tn_user_seq.id;
테스트
생성
INSERT INTO tn_user_seq (name, created_date, modified_date) VALUES('LSH', current_timestamp, current_timestamp);
INSERT INTO tn_user_seq (name, created_date, modified_date) VALUES('KBR', current_timestamp, current_timestamp);
조회
id|name|created_date |modified_date |
--+----+-------------------+-------------------+
1|LSH |2021-07-15 10:16:52|2021-07-15 10:16:52|
2|KBR |2021-07-15 10:17:36|2021-07-15 10:17:36|
특이 사항
- 미리 시퀀스를 생성해야함
- 테이블을 만들 때 칼럼 정의 필요
- 테이블을 지울 때 Sequence 따로 삭제
Serial
테이블 생성
CREATE TABLE TN_USER (
id SERIAL primary key,
name varchar(255),
created_date timestamp,
modified_date timestamp
);
테스트
생성 후 조회
id|name|created_date |modified_date |
--+----+-------------------+-------------------+
1|LSH |2021-07-15 10:28:06|2021-07-15 10:28:06|
2|KBR |2021-07-15 10:28:57|2021-07-15 10:28:57|
특이 사항
- serial 자료형을 사용하는 일련 번호 처리는 표준 SQL이 아님
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
- GENERATED ALWAYS AS IDENTITY
- GENERATED BY DEFAULT AS IDENTITY
GENERATED ALWAYS AS IDENTITY
테이블 생성
CREATE TABLE tn_user_seq (
id INTEGER GENERATED ALWAYS IDENTITY PRIMARY KEY,
name VARCHAR(255),
created_date TIMESTAMP,
modified_date TIMESTAMP
);
테스트
생성 후 조회
id|name|created_date |modified_date |
--+----+-------------------+-------------------+
1|LSH |2021-07-15 10:28:06|2021-07-15 10:28:06|
2|KBR |2021-07-15 10:28:57|2021-07-15 10:28:57|
특이 사항
- 직접 id 필드에 값을 할당할 경우 오류
- 강제로 입력하는 방법은 override system value 구문을 통해 직접 입력이 가능
INSERT INTO tn_user_seq (name, created_date, modified_date) OVERRIDING SYSTEM VALUE VALUES('LSH', current_timestamp, current_timestamp);
GENERATED BY DEFAULT AS IDENTITY
테이블 생성
CREATE TABLE tn_user_seq (
id INTEGER GENERATED ALWAYS IDENTITY PRIMARY KEY,
name VARCHAR(255),
created_date TIMESTAMP,
modified_date TIMESTAMP
);
테스트
생성 후 조회
id|name|created_date |modified_date |
--+----+-------------------+-------------------+
1|LSH |2021-07-15 10:28:06|2021-07-15 10:28:06|
2|KBR |2021-07-15 10:28:57|2021-07-15 10:28:57|
특이 사항
- serial 과 동일한 작동
- id 값을 강제로 입력하여 저장도 가능