DataBase/PostgreSQL

[PostgreSQL] 시퀀스(Sequence) 사용법

범데이 2021. 12. 29. 01:32
728x90

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

 

 

아래 예제를 통해 더 알아보자. (시퀀스 이름은 my_seq으로 가정)


2. 시퀀스 사용법

1. 시퀀스 생성과 삭제

CREATE SEQUENCE my_seq;
DROP SEQUENCE my_seq;

 

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

SELECT currval('my_seq');
SELECT nextval('my_seq');

 

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

 

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

 

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

nextval()을 한번 실행해주고 다시 해주도록 하자.

 

3. 시퀀스 초기화

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)에서 +1을 하여 사용된다.

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

 

 

4. 쿼리문으로 목록 가져오기

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;

 

 

추후 해당 시퀀스를 테이블에서 사용 시,

테이블의 컬럼 Properties설정에서 'Default' 열에 위처럼 값을 넣어주면 된다.

nextval('my_seq'::regclass)

 

 

 

 


#References

https://mine-it-record.tistory.com/341

반응형