▷생성
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;
'데이터베이스 > Postgresql' 카테고리의 다른 글
[PostgreSQL] 트리거 생성 (0) | 2021.09.07 |
---|---|
[PostgreSQL] 시간 데이터타입 쿼리/함수 (0) | 2021.08.07 |
베큠 사용 postgresql 쓰레기 데이터 정리 (0) | 2021.07.28 |
[PostgreSQL] da# erd 생성 (0) | 2021.07.27 |
[PostgresSQL] postgresql Block Size (0) | 2021.07.27 |
댓글