▷생성
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.07.17 |
---|---|
[PostgreSQL] 데이터 있으면 update 없으면 insert (0) | 2021.07.17 |
[PostgreSQL] Schema 관리(생성/추가/변경/삭제) (0) | 2021.07.16 |
[PostgreSQL] SQL 파일 실행 (0) | 2021.07.16 |
[PostgreSQL] 문자열 함수 (자르기, 붙히기, 치환 등) (0) | 2021.07.16 |
댓글