본문 바로가기
데이터베이스/Postgresql

[PostgreSQL] 시퀀스 생성 및 사용

by cbwstar 2021. 7. 17.
728x90
반응형

▷생성

 CREATE SEQUENCE [seq_name]

 

▷nextval

 nextval('seq_name')

 

▷currval

 currval('seq_name')

 

▷값 초기화

 setval('seq_name', seq_val, [true/false])

 

▷삭제

 DROP SEQUENCE [seq_name]

 

사용 예제)

 

CREATE SEQUENCE mine_seq;

 

SELECT nextval('mine_seq');

 

SELECT currval('mine_seq');

 

DROP SEQUENCE mine_seq;

 

시퀀스를 생성해놓고 바로 확인을 하기 위해 currval()을 사용하여 확인하게 되면 다음과 같은 에러가 발생하는데

 

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

 

SQL state: 55000

 

분명 생성은 됐는데 이상하게 에러가 발생한다.

 

이럴경우에는 당황하지말고 nextval()를 한번 해주고

 

 다시 currval를 해주면 정상적으로 작동한다.

 

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

 

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

 

setval는 특이하게 boolean값을 줄 수가 있는데 의미는

 

true 일 경우 nextval를 할 때 초기화된 값 (1)의 + 1 을 하게 되는거고

false일 경우 nextval를 할 때 초기화된 값 (1)을 그대로 사용하게 되는거다.

 

/* 시퀀스 생성확인 쿼리 */

 

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;

728x90
반응형

댓글



"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

loading