ALTER SEQUENCE — シーケンスジェネレータの定義を変更する
ALTER SEQUENCE [ IF EXISTS ]name[ 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 ]nameOWNER TO {new_owner| CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]nameRENAME TOnew_nameALTER SEQUENCE [ IF EXISTS ]nameSET SCHEMAnew_schema
ALTER SEQUENCEは、既存のシーケンスジェネレータのパラメータを変更します。
ALTER SEQUENCEで指定されなかったパラメータについては、以前の設定が保持されます。
ALTER SEQUENCEを使用するには、シーケンスの所有者でなければなりません。
シーケンスのスキーマを変更するには、新しいスキーマにおけるCREATE権限も持たなければなりません。
所有者を変更するには、新しく所有者となるロールの直接または間接的なメンバでなければなりません。
またそのロールはシーケンスのスキーマ上にCREATE権限を持たなければなりません。
(これらの制限は、シーケンスの削除および再作成によりユーザが実行できないことを、所有者の変更により実行されないようにするためのものです。
しかし、スーパーユーザはすべてのシーケンスの所有者を変更することができます。)
name変更するシーケンスの名前です(スキーマ修飾名も可)。
IF EXISTSシーケンスが存在しない場合にエラーとしません。 この場合、注意メッセージが発生します。
incrementINCREMENT BY 句は省略可能です。
正の値が指定された時は昇順のシーケンス、負の値が指定された時は降順のシーケンスにします。
指定がない場合、以前の増分値が保持されます。
increment
minvalueNO MINVALUEMINVALUE 句はシーケンスジェネレータが生成する最小値を決定します。
minvalueNO MINVALUEが指定された場合、昇順の時は1、降順の時は-(263-1)がデフォルトになります。
どちらのオプションも指定されていなければ、現在の最小値が保持されます。
maxvalueNO MAXVALUEMAXVALUE 句はシーケンスが生成する最大値を決定します。
maxvalueNO MAXVALUEが指定された場合、昇順の時は263-1、降順の時は-1がデフォルトになります。
どちらのオプションも指定されていなければ、現在の最大値が保持されます。
startSTART WITH 句(省略可能)は、記録されているシーケンスの開始値を変更します。
これは現在のシーケンス値に影響しません。
単に将来実行されるstartALTER SEQUENCE RESTARTコマンドが使用する値を設定するだけです。
restartRESTART WITH 句(省略可能)は、シーケンスの現在値を変更します。
これはrestartis_called = falseとしてsetval関数を呼び出すことと同じです。
指定した値は次のnextval呼出時に返されます。
restartを付けずにRESTARTと記述することは、CREATE SEQUENCEで記録、または前回ALTER SEQUENCE START WITHで設定された開始値を指定することと同じです。
cacheCACHE 句を使用すると、アクセスを高速化するために、シーケンス番号を事前に割り当て、メモリに保存しておくことができます。
最小値は1です(一度に生成する値が1つだけなので、キャッシュがない状態になります)。
指定がなければ、以前のキャッシュ値が保持されます。
cache
CYCLECYCLEキーワードを使用すると、シーケンスが限界値(昇順の場合はmaxvalue、降順の場合はminvalue)に達した時、そのシーケンスを周回させることができます。
限界値に達した時、次に生成される番号は、昇順の場合はminvalue、降順の場合はmaxvalueになります。
NO CYCLENO CYCLEキーワードが指定されると、シーケンスの限界値に達した後のnextval呼び出しは全てエラーとなります。
CYCLEもNO CYCLEも指定されていない場合は、以前の周回動作が保持されます。
OWNED BY table_name.column_nameOWNED BY NONEOWNED BYオプションにより、シーケンスは指定されたテーブル列に関連付けられ、その列(やテーブル全体)が削除されると、自動的にシーケンスも一緒に削除されるようになります。
指定があると、以前に指定されたシーケンスの関連は、指定された関連に置き換えられます。
指定するテーブルは、シーケンスと同一所有者でなければならず、また、同一のスキーマ内に存在しなければなりません。
OWNED BY NONEを指定することで、既存の関連は削除され、シーケンスは「独立」したものになります。
new_ownerシーケンスの新しい所有者のユーザ名です。
new_nameシーケンスの新しい名称です。
new_schemaシーケンスの新しいスキーマです。
同じシーケンスから番号を取得するトランザクションの同時実行がブロックされるのを防ぐために、シーケンス生成パラメータに関するALTER SEQUENCEの操作はロールバックされません。
すなわち、シーケンス生成パラメータの変更は即座に反映され、元に戻すことはできません。
しかし、OWNED BY、OWNER TO、RENAME TOおよびSET SCHEMA句は通常のカタログ更新となり、ロールバックすることができます。
ALTER SEQUENCEは、コマンドを実行したバックエンド以外のバックエンドにおけるnextvalに対しては、すぐには効力を発揮しません。
これらのバックエンドに事前に割り当てられた(キャッシュされた)シーケンス値がある場合、この値を全て使い果たした後に、変更されたシーケンス生成パラメータを検知します。
コマンドを実行したバックエンドには、即座に変更が反映されます。
ALTER SEQUENCEはシーケンスのcurrval状態には影響しません。
(8.3より前のPostgreSQLでは影響を与える場合がありました。)
歴史的な理由によりALTER TABLEはシーケンスにも使用することができます。
しかし、シーケンスに対して許されるALTER TABLEの構文は、上で示した構文と等価なものだけです。
serialというシーケンスを105から再開します。
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCEは、PostgreSQLの拡張であるSTART WITH、OWNED BY、OWNER TO、RENAME TO、SET SCHEMA構文を除いて、標準SQLに従っています。