티스토리 뷰

PostgreSQL SEQUENCE

Incremental Unique Key Sequence 를 생성하기 위해

PostgreSQL , ORACLE 은 SEQUENCE 라고 불리는 독립 오브젝트를 제공하며,

SQL-Server , Sybase 은 컬럼에 IDENTITY 속성을,

MySQL 은 컬럼에 AUTO_INCREMENT 속성을 사용한다.

이번 포스팅에서는 PostgreSQL 에서 SEQUENCE 오브젝트 관련 Function 을
정리하고 활용 예제를 작성해 보도록 하겠다.


  • SEQUENCE 관련 주요 Function 정리

    • nextval(seq_name) - 시퀀스 값을 증가시키고 리턴한다.
    • currval(seq_name) - 가장 최근 nextval 함수를 호출하여 얻은 값을 리턴한다. 현재 세션에서 nextval 을 호출하지 않았을 경우 오류를 반환한다.
    select currval('seq_student');
    
    ********** Error **********
    ERROR: currval of sequence "seq_student" is not yet defined in this session
    SQL state: 55000
    • setval(seq_name, value) - 시퀀스의 현재값을 특정값(value)으로 초기화 한다.
  • 시퀀스 생성

CREATE SEQUENCE seq_student START 1;
  • CASE 1. 테이블 생성시 ID 컬럼에 DEFAULT 속성 부여
-- 테이블 생성
CREATE TABLE student
(
  id integer DEFAULT nextval('seq_student'),
  name varchar(50),
  eml varchar(100),
  birthday char(8),
  gender char(1),
  constraint pk_student primary key (id)
);

-- 데이터 입력 (id 컬럼은 INSERT 컬럼에서 제외한다.)
INSERT INTO student (name,eml,birthday,gender)
VALUES ('홍길동','hgd@mail.com','18830101','M');

INSERT INTO student (name,eml,birthday,gender)
VALUES ('이순신','lss@mail.com','16830201','F');

INSERT INTO student (name,eml,birthday,gender)
VALUES ('유관순','ygs@mail.com','19030301','M');

INSERT INTO student (name,eml,birthday,gender)
VALUES ('임꺽정','lgj@mail.com','15830401','F');
  • CASE 2. DEFAULT 속성을 쓰지 않고 INSERT 시점에 VALUE 로 입력
-- 테이블 생성
CREATE TABLE student
(
  id integer,
  name varchar(50),
  eml varchar(100),
  birthday char(8),
  gender char(1),
  constraint pk_student primary key (id)
);

-- 데이터 입력
INSERT INTO student (id,name,eml,birthday,gender)
VALUES (nextval('seq_student'),'홍길동','hgd@mail.com','18830101','M');

INSERT INTO student (id,name,eml,birthday,gender)
VALUES (nextval('seq_student'),'이순신','lss@mail.com','16830201','F');

INSERT INTO student (id,name,eml,birthday,gender)
VALUES (nextval('seq_student'),'유관순','ygs@mail.com','19030301','M');

INSERT INTO student (id,name,eml,birthday,gender)
VALUES (nextval('seq_student'),'임꺽정','lgj@mail.com','15830401','F');

'RDBMS > PostgreSQL' 카테고리의 다른 글

PostgreSQL) TABLESPACE, DATABASE 생성  (0) 2016.08.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함