ALTER SEQUENCE — シーケンスジェネレータの定義を変更する
ALTER SEQUENCE [ IF EXISTS ]name
[ ASdata_type
] [ INCREMENT [ BY ]increment
] [ MINVALUEminvalue
| NO MINVALUE ] [ MAXVALUEmaxvalue
| NO MAXVALUE ] [ START [ WITH ]start
] [ RESTART [ [ WITH ]restart
] ] [ CACHEcache
] [ [ NO ] CYCLE ] [ OWNED BY {table_name
.column_name
| NONE } ] ALTER SEQUENCE [ IF EXISTS ]name
SET { LOGGED | UNLOGGED } ALTER SEQUENCE [ IF EXISTS ]name
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]name
RENAME TOnew_name
ALTER SEQUENCE [ IF EXISTS ]name
SET SCHEMAnew_schema
ALTER SEQUENCE
は、既存のシーケンスジェネレータのパラメータを変更します。
ALTER SEQUENCE
で指定されなかったパラメータについては、以前の設定が保持されます。
ALTER SEQUENCE
を使用するには、シーケンスの所有者でなければなりません。
シーケンスのスキーマを変更するには、新しいスキーマにおけるCREATE
権限も持たなければなりません。
所有者を変更するには、新しい所有者ロールに対してSET ROLE
ができなければなりません。またそのロールはシーケンスのスキーマ上にCREATE
権限を持たなければなりません。
(これらの制限は、シーケンスの削除および再作成によりユーザが実行できないことを、所有者の変更により実行されないようにするためのものです。
しかし、スーパーユーザはすべてのシーケンスの所有者を変更できます。)
name
変更するシーケンスの名前です(スキーマ修飾名も可)。
IF EXISTS
シーケンスが存在しない場合にエラーとしません。 この場合、注意メッセージが発生します。
data_type
オプション句AS
はシーケンスのデータ型を変更します。
有効な型はdata_type
smallint
、integer
、bigint
です。
データ型を変更したとき、以前の最小値と最大値は、古いデータ型の最小値と最大値に一致している場合に限り(別の言い方をすれば、暗示的にせよ明示的にせよ、シーケンスがNO MINVALUE
またはNO MAXVALUE
で作られていた場合に)、シーケンスの最小値および最大値が自動的に変更されます。
そうでない場合、新しい値が同じコマンドの一部として指定されているのでなければ、最小値と最大値は保存されます。
最小値と最大値が新しいデータ型に適合しない場合は、エラーが生成されます。
increment
INCREMENT BY
句は省略可能です。
正の値が指定された時は昇順のシーケンス、負の値が指定された時は降順のシーケンスにします。
指定がない場合、以前の増分値が保持されます。
increment
minvalue
NO MINVALUE
MINVALUE
句はシーケンスジェネレータが生成する最小値を決定します。
minvalue
NO MINVALUE
が指定された場合、昇順の時は1、降順の時はデータ型の最小値がデフォルトになります。
どちらのオプションも指定されていなければ、現在の最小値が保持されます。
maxvalue
NO MAXVALUE
MAXVALUE
句はシーケンスが生成する最大値を決定します。
maxvalue
NO MAXVALUE
が指定された場合、昇順の時はデータ型の最大値、降順の時は-1がデフォルトになります。
どちらのオプションも指定されていなければ、現在の最大値が保持されます。
start
START WITH
句(省略可能)は、記録されているシーケンスの開始値を変更します。
これは現在のシーケンス値に影響しません。
単に将来実行されるstart
ALTER SEQUENCE RESTART
コマンドが使用する値を設定するだけです。
restart
RESTART WITH
句(省略可能)は、シーケンスの現在値を変更します。
これはrestart
is_called
= false
としてsetval
関数を呼び出すことと似ています。
指定した値は次のnextval
呼出時に返されます。
restart
を付けずにRESTART
と記述することは、CREATE SEQUENCE
で記録、または前回ALTER SEQUENCE START WITH
で設定された開始値を指定することと同じです。
setval
の呼び出しとは異なり、シーケンスに対するRESTART
の操作はトランザクション的で、同時実行中のトランザクションが同じシーケンスから値を取得するのをブロックします。
それが期待する動作でないときは、setval
を使用してください。
cache
CACHE
句を使用すると、アクセスを高速化するために、シーケンス番号を事前に割り当て、メモリに保存しておくことができます。
最小値は1です(一度に生成する値が1つだけなので、キャッシュがない状態になります)。
指定がなければ、以前のキャッシュ値が保持されます。
cache
CYCLE
CYCLE
キーワードを使用すると、シーケンスが限界値(昇順の場合はmaxvalue
、降順の場合はminvalue
)に達した時、そのシーケンスを周回させることができます。
限界値に達した時、次に生成される番号は、昇順の場合はminvalue
、降順の場合はmaxvalue
になります。
NO CYCLE
NO CYCLE
キーワードが指定されると、シーケンスの限界値に達した後のnextval
呼び出しは全てエラーとなります。
CYCLE
もNO CYCLE
も指定されていない場合は、以前の周回動作が保持されます。
SET { LOGGED | UNLOGGED }
この構文は、シーケンスをログを取らないものからログを取るものに、またはその逆に変更します(CREATE SEQUENCEを参照してください)。 一時シーケンスには適用できません。
OWNED BY
table_name
.column_name
OWNED BY NONE
OWNED BY
オプションにより、シーケンスは指定されたテーブル列に関連付けられ、その列(やテーブル全体)が削除されると、自動的にシーケンスも一緒に削除されるようになります。
指定があると、以前に指定されたシーケンスの関連は、指定された関連に置き換えられます。
指定するテーブルは、シーケンスと同一所有者でなければならず、また、同一のスキーマ内に存在しなければなりません。
OWNED BY NONE
を指定することで、既存の関連は削除され、シーケンスは「独立」したものになります。
new_owner
シーケンスの新しい所有者のユーザ名です。
new_name
シーケンスの新しい名称です。
new_schema
シーケンスの新しいスキーマです。
ALTER SEQUENCE
は、コマンドを実行したバックエンド以外のバックエンドにおけるnextval
に対しては、すぐには効力を発揮しません。
これらのバックエンドに事前に割り当てられた(キャッシュされた)シーケンス値がある場合、この値を全て使い果たした後に、変更されたシーケンス生成パラメータを検知します。
コマンドを実行したバックエンドには、即座に変更が反映されます。
ALTER SEQUENCE
はシーケンスのcurrval
状態には影響しません。
(8.3より前のPostgreSQLでは影響を与える場合がありました。)
ALTER SEQUENCE
は、同時に実行されるnextval
、currval
、lastval
、setval
の呼び出しをブロックします。
歴史的な理由によりALTER TABLE
はシーケンスにも使用することができます。
しかし、シーケンスに対して許されるALTER TABLE
の構文は、上で示した構文と等価なものだけです。
serial
というシーケンスを105から再開します。
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE
は、PostgreSQLの拡張であるAS
、START WITH
、OWNED BY
、OWNER TO
、RENAME TO
、SET SCHEMA
構文を除いて、標準SQLに従っています。