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

[PostgreSQL] 시퀀스 생성 및 사용

by cbwstar 2021. 8. 7.
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