본문 바로가기
DBMS/PostgreSQL

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

by 썸머워즈 2020. 10. 4.
반응형

PostgreSQL에서 시퀀스(Sequence)를 사용하는 방법에 대해 알아보자.

 

▷ 구문

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

 

이제 예제를 통해 직접 알아보도록 하자.


▷ 예제1) 시퀀스 생성삭제

CREATE SEQUENCE mine_seq;

DROP SEQUENCE mine_seq;

 

▷ 예제2) 시퀀스 현재값다음값

SELECT currval('mine_seq');
SELECT nextval('mine_seq');

 

여기서 currval()를 사용하다가 다음과 같은 에러가 발생할 수 있다.

ERROR: 오류:  "mine_seq" 시퀀스의 currval 값이 현재 세션에 지정되어 있지 않습니다
SQL state: 55000

 

분명히 생성은 했지만 currval()를 사용할때 에러가 발생한다면

당황하지 말고 nextval()를 한번 실행해주고 다시 해주도록하자 그럼 정상적으로 작동하는것을 볼 수 있다.

 

▷ 예제3) 시퀀스 초기화

SELECT setval('mine_seq', 1, true); -- nextval('mine_seq') = 2
SELECT setval('mine_seq', 1, false); -- nextval('mine_seq') = 1

 

setval() 함수는 해당 시퀀스를 초기화 시켜주는 것인데 저기서 true/false의 역할은 다음과 같다.

true : 초기화 후 nextval를 사용할때 초기화된 값(1)에서 +1을 하여 사용된다.

false : 초기화 후 nextval를 사용할때 초기화된 값(1)을 그대로 사용한다.

 


해당 시퀀스 관련 함수들을 실행할때 본인이 스키마별로 시퀀스가 있다고 하면 테이블명 앞에 스키마를 적어주면 된다.

 

추가적으로 생성한 시퀀스 목록을 확인하는 방법에 대해 알아보고자 한다.

 

▷ 예제4) pgAdmin에서 생성한 시퀀스 목록 가져오기

 

Servers > [개인 지정 이름] > Databases > [특정 데이터베이스] > Schemas > Sequences

경로로 들어가주면 확인이 가능하다.

 

▷ 예제5) 쿼리문으로 목록 가져오기

출처 : https://stackoverrun.com/ko/q/10527400

select n.nspname as sequence_schema, 
          c.relname as sequence_name,
          u.usename as owner
from pg_class c 
     join pg_namespace n on n.oid = c.relnamespace
     join pg_user u on u.usesysid = c.relowner
where c.relkind = 'S'
     and u.usename = current_user;

 

반응형


댓글

TOP