PostgreSQL-시퀀스(Sequence)

개미는뚠뚠·2023년 8월 12일
1

PostgerSQL

목록 보기
1/4

오늘은 구현하던 기능 중 특정 컬럼의 값을 자동으로 증가시켜주는 기능이 필요했던 내용을 찾아보았다. 그 내용이 바로 시퀀스라는 개념이였고, 업무를 진행하면서 알게 된 내용과 찾아본 내용을 정리해서 작성해보려고 한다.


시퀀스(Sequence)란?

  • 유니크한 값을 생성해주는 오라클 객체를 의미한다
  • 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할 수 있다.
  • 보통 PRIMARY KEY 값을 생성하거나 자동적으로 증가하는 값에 대해서 사용할 수 있다.
  • SEQUENCE는 테이블과는 독립적으로 저장되고 생성된다. 따라서 하나의 SEQUENCE를 여러 테이블에서 응용하여 사용이 가능하다.

1. 시퀀스 구문

create : CREATE SEQUENCE <seq_name>
nextval: nextval('seq_name')
currval: currval('seq_name')
setval: setval('seq_name', seq_val, [true/false])
drop: DROP SEQUENCE seq_name

시퀀스 구문에는 위와 같은 5가지 종류가 있다. 아래에서 직접 사용을 하면서 어떠한 내용인지 확인해보자.

2. 시퀀스의 응용

2-1. 시퀀스 생성과 삭제

CREATE SEQUENCE seq_name;
DROP SEQUENCE seq_name;

CREATE를 통한 시퀀스의 생성을 진행하고, DROP을 통해 시퀀스의 삭제를 진행할 수 있다.

2-2. 시퀀스 현재값과 다음값

SELECT currval('seq_name');
SELECT nextval('seq_name');

currval을 통한 현재 시퀀스의 값을 확인할 수 있고, nextval을 통해 현재 값에서 +1의 값을 증가하게 할 수 있다.
많은 블로그에서 에러가 나는 경우 nextval을 진행하면 해결이 된다고 표현을 했는데 그 이유는 현재 시퀀스에 아무런 값도 정의되지 않았을 때 해당 에러가 발생한다고 보면 된다.

2-3. 시퀀스 초기화

SELECT setval('seq_name', 1, true); -- 결과값 = 2
SELECT setval('seq_name', 1, false); -- 결과값 = 1

setval() 함수를 통하여 해당 시퀀스를 초기화 준다. true/false의 역할은 다음과 같다.

  • true - 초기화 후 nextval을 사용할 때 초기화 된 값(1)에서 +1을 하여 사용된다.
  • false - 초기화 후 nextval을 사용할 때 초기화 된 값(1)을 그대로 사용한다.

활용 예시

db데이터가 총 5개의 컬럼이 이루어져있고, COLUMN0이 만약 해당 테이블의 시퀀스라면 아래 insert문에서 해당 컬럼을 제외하고 데이터를 삽입한다.

INSERT INTO
	TABLE_NAME
(
	COLUMN1,
    COLUMN2,
    COLUMN3,
    COLUMN4
)
VALUES
(
	VALUE1,
    VALUE2,
    VALUE3,
    VALUE4
);

그러면 해당 컬럼에는 아무런 값도 주지 않았지만 실제로 COLUMN0에는 지정해준 시퀀스의 +1 값을 통해 자동으로 VALUE0을 갖게 된다.


스크린샷도 없이 왜 이렇게 말로 설명하냐 하면 사실 지금 DB툴을 열어서 글을 쓸 수 있는 환경이 아니라 부족한 설명을 진행했다. 블로그에 앞으로도 신경을 좀 많이 써야하는데 업무도 바쁘고 요새 내가 좀 풀어짐을 느낀다 ㅠ 담주부터는 그래도 여유가 좀 생기니 앞으로도 애정을 갖고 글을 써보도록 하겠다.

0개의 댓글