ALTER SEQUENCE — 시퀀스 정의 바꾸기
ALTER SEQUENCE [ IF EXISTS ]이름
[ AS자료형
] [ INCREMENT [ BY ]증가값
] [ MINVALUE최소값
| NO MINVALUE ] [ MAXVALUE최대값
| NO MAXVALUE ] [ START [ WITH ]시작값
] [ RESTART [ [ WITH ]재시작값
] ] [ CACHE캐시
] [ [ NO ] CYCLE ] [ OWNED BY {테이블이름
.칼럼이름
| NONE } ] ALTER SEQUENCE [ IF EXISTS ]이름
OWNER TO {새소유주
| CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]이름
RENAME TO새이름
ALTER SEQUENCE [ IF EXISTS ]이름
SET SCHEMA새스키마
ALTER SEQUENCE
명령은 시퀀스 정의를 바꾼다.
ALTER SEQUENCE
명령에서 지정하지 않은 설정들은
기존 설정을 그대로 따른다.
ALTER SEQUENCE
명령은 그 시퀀스의 소유주가 실행할 수 있다.
스키마를 바꾸는 경우, 새 스키마에 대한 CREATE
권한이 있어야 한다.
소유주를 바꾸는 경우, 현재 소유주는 직간접적으로 새 소유주의
구성원이어야 하며, 새 소유주는 해당 스키마에 대해서
CREATE
권한이 있어야 한다. (새 사용자가
그 시퀀스를 지우거나, 새로 만들 수 있어야 하기 때문이다.
슈퍼유저는 이런 제한 없이 작업할 수 있다.)
이름
작업 대상 시퀀스 이름(스키마 이름 포함).
IF EXISTS
이 옵션을 사용하면 해당 시퀀스가 없어도 오류로 처리하지 않고, 알림 메시지만 보여주고 마친다.
자료형
AS
구문을 이용해서 그 시퀀스의 자료형을 바꿀 수 있다.
사용할 수 있는 값은 자료형
smallint
,
integer
, bigint
셋 중 하나.
또한 이 작업을 통해, 기존 최소, 최대값이 새 자료형 범위와
맞지 않다면, 해당 시퀀스의 최소, 최대값도 자동으로 바꾼다.
(다른 말로, 묵시적이든, 명시적이든 그 시퀀스를 만들 때,
NO MINVALUE
또는
NO MAXVALUE
옵션을 사용해서 만든 시퀀스는
이렇게 작동한다.)
반면, 한 명령 안에 이 새 값을 함께 지정하지 않았다면,
최소, 최대값은 그대로 유지된다.
최소, 최대값이 새 자료형 범위에 속하지 않으면 오류로 처리한다.
증가값
INCREMENT BY
구문은
선택적으로 사용할 수 있다. 증가값이 양수면, 증가하고,
음수면 감소한다. 이 구문을 사용하지 않으면, 기존 증가값을
그대로 사용한다.
증가값
최소값
NO MINVALUE
MINVALUE
구문은
시퀀스의 최소값을 지정하는 것이다.
minvalue
NO MINVALUE
로 지정하면,
증가 시퀀스인 경우는 1,
감소 시퀀스인 경우는 해당 자료형의 최소값을 사용한다.
이 두 옵션 모두 사용하지 않으면, 시퀀스를 만들 때
지정한(지정된) 최소값을 그대로 사용한다.
최대값
NO MAXVALUE
MAXVALUE
구문은
시퀀스의 최대값을 지정하는 것이다.
최대값
NO MAXVALUE
로 지정하면,
증가 시퀀스인 경우는 자료형의 최대값,
감소 시퀀스인 경우는 이 값이 -1 이다.
이 두 옵션을 모두 사용하지 않으면, 시퀀스를 만들 때
지정한(지정된) 최대값을 그대로 사용한다.
시작값
START WITH
구문은
시퀀스 시작값을 지정한다.
이 설정은 시퀀스의 현재값을 바꾸지는 않는다.
단지 시작값
ALTER SEQUENCE RESTART
명령으로
기본 시작값으로 시퀀스를 재 설정할 때만 사용된다.
재시작값
RESTART [ WITH
구문은
시퀀스 현재 값을 바꾼다.
이 작업은 재시작값
]setval
함수를 is_called
=
false
인자값으로 실행한 결과와 비슷하다.
여기서 지정한 재시작값은 다음 nextval
함수의
결과값으로 사용된다.
RESTART
에서 재시작값
을 지정하지 않고 사용하면,
CREATE SEQUENCE
명령으로 시퀀스를 만들 때 사용한
시작값이나, ALTER SEQUENCE START WITH
명령으로
그 시작값을 바꾼 시작값으로 재시작한다.
setval
함수를 사용하는 것과 달리
RESTART
작업은 트랜잭션 내 시퀀스 잠금을
한다. 이런 잠금에 따른 다른 세션의 대기를 피하려면,
setval
함수를 사용해야 한다. (물론
이 경우 트랜잭션 작업으로 얻을 수 있는 장점들은 포기한다. - 옮긴이)
캐시
CACHE
구문은
시퀀스 캐시값을 지정한다. 이 값의 변화량 만큼은
메모리 안에서만 처리한다. 기본값은 1이다 (캐시 사용 안함)
이 옵션을 사용하지 않은 기존 캐시값을 사용한다.
(PostgreSQL 시퀀스 캐시는 세션 단위로 처리한다는 점을
기억해야 한다. - 옮긴이)
캐시
CYCLE
CYCLE
키워드는 시퀀스 다음 번호 구하기 작업에서
최대값이나, 최소값으로 도달 했을 때, 다시 시작한다.
(증감 시퀀스는 최소값부터 다시, 감소 시퀀스는 최대값부터 다시)
NO CYCLE
NO CYCLE
키워드를 사용하면,
nextval
작업에서 최대값에 도달하면,
오류로 처리한다.
CYCLE
, NO
CYCLE
둘 다 사용하지 않는다면, 기존 설정을 따른다.
OWNED BY
테이블이름
.칼럼이름
OWNED BY NONE
OWNED BY
옵션은 지정한 칼럼과 시퀀스가
의존 관계를 맺는다. 이렇게 하면,
그 테이블이나, 테이블의 칼럼이 지워지면 이 시퀀스도 자동으로
함께 지워진다. 이 지정은 기존에 다른 의존관계가 있다하더라도
오류 없이 새 의존관계로 처리한다. 테이블의 소유주와,
시퀀스의 소유주가 같아야 한다.
OWNED BY NONE
옵션은 기존 의존 관계를
끊는다. 그래서 독립적인 시퀀스가 되도록 한다.
새소유주
해당 시퀀스의 바뀔 새 소유주 이름.
새이름
바뀔 새 시퀀스 이름.
새스키마
해당 시퀀스의 바뀔 새 스키마 이름.
ALTER SEQUENCE
명령의 결과가
모든 세션의 nextval
작업에 바로 영향을 미칠 것이라고
생각하면 안된다. 시퀀스는 캐시가 있기 때문에, 이 작업을 한
세션이 아니라면, 각자 자신의 캐시에 있는 시퀀스 정보를 사용한다.
물론 명령을 수행하는 그 세션은 바로 반영된다.
ALTER SEQUENCE
명령은 시퀀스의 currval
상태에 아무런 영향을 주지 않는다 (PostgreSQL
8.3 이전에는 영향을 줬다.)
ALTER SEQUENCE
작업은 동시에 일어나는
nextval
, currval
,
lastval
, setval
작업을 자기
작업이 끝나기 전까지 대기 상태로 만든다.
역사적인 이유로, 몇몇 작업은 ALTER TABLE
명령으로
시퀀스 정보를 바꿀 수 있다. 이때 사용하는 구문은 위에 소개한
구문을 사용한다.
(예, ALTER TABLE sequence_name RENAME TO new_sequence_name - 옮긴이)
serial
시퀀스를 105에서 다시 시작하는 경우:
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE
구문은 표준 SQL
구문이다. AS
, START WITH
,
OWNED BY
, OWNER TO
, RENAME TO
,
SET SCHEMA
옵션은 PostgreSQL
확장 기능이다.