[PostgreSQL] 시퀀스(Sequence) 사용법 (nextval, currval, setval)

misonaru·2025년 10월 15일

SQL

목록 보기
21/21

현재 진행하던 프로젝트에서는 시퀀스로 id 등 생성하는 경우가 잦더라.
운영에서 테스트 종료 후 테스트 데이터 삭제 시에 시퀀스도 초기화 해줘야 했기에...
(근데 이럴 거면 첫 프로젝트 때 사용하던 방법인 현재 값 중 최고값 비교 후 그걸 사용하는 게 낫지 않나 싶기도...)

구문

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

시퀀스 생성

CREATE SEQUENCE my_seq;

시퀀스 삭제

DROP SEQUENCE my_seq;

시퀀스 현재값 확인

SELECT CURVALL('my_seq');

시퀀스 다음값 확인

SELECT NEXTVAL('my_seq');
  • CURRVAL() 사용시 아래 오류 발생할 수 있음.

    SQL Error [55000]: 오류: "my_seq" 시퀀스의 currval 값이 현재 세션에 지정되어 있지 않습니다.

  • 생성을 하였으나 에러가 발생하면 nextval() 실행 후 다시 실행하면 동작함.

시퀀스 초기화

SELECT SETVAL('my_seq', 1, true);	-- NEXTVAL('my_seq') = 2
SELECT SETVAL('my_seq', 1, false);	-- NEXTVAL('my_seq') = 1
  • SETVAL() : 해당 시퀀스를 초기화 시켜주는 함수. true와 false는 아래와 같다.
    - true : 초기화 후 NEXTVAL() 사용시 초기화한 값에서 +1 하여 사용
    • false : 초기화 후 NEXTVAL() 사용시 초기화한 값을 그대로 사용
profile
미소와 나루 집사

0개의 댓글