본문 바로가기
저장소이야기/PostgreSQL

[PostgreSQL] 자동증가 방법

by 사랑꾼이야 2021. 7. 25.
반응형
postgresql

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 값을 강제로 입력하여 저장도 가능
반응형

댓글