他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER SEQUENCE

ALTER SEQUENCE — シーケンスジェネレータの定義を変更する

概要

ALTER SEQUENCE [ IF EXISTS ] name
    [ AS data_type ]
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ] [ [ 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 TO new_name
ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

説明

ALTER SEQUENCEは、既存のシーケンスジェネレータのパラメータを変更します。 ALTER SEQUENCEで指定されなかったパラメータについては、以前の設定が保持されます。

ALTER SEQUENCEを使用するには、シーケンスの所有者でなければなりません。 シーケンスのスキーマを変更するには、新しいスキーマにおけるCREATE権限も持たなければなりません。 所有者を変更するには、新しい所有者ロールに対してSET ROLEができなければなりません。またそのロールはシーケンスのスキーマ上にCREATE権限を持たなければなりません。 (これらの制限は、シーケンスの削除および再作成によりユーザが実行できないことを、所有者の変更により実行されないようにするためのものです。 しかし、スーパーユーザはすべてのシーケンスの所有者を変更できます。)

パラメータ

name

変更するシーケンスの名前です(スキーマ修飾名も可)。

IF EXISTS

シーケンスが存在しない場合にエラーとしません。 この場合、注意メッセージが発生します。

data_type

オプション句AS data_typeはシーケンスのデータ型を変更します。 有効な型はsmallintintegerbigintです。

データ型を変更したとき、以前の最小値と最大値は、古いデータ型の最小値と最大値に一致している場合に限り(別の言い方をすれば、暗示的にせよ明示的にせよ、シーケンスが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 cache句を使用すると、アクセスを高速化するために、シーケンス番号を事前に割り当て、メモリに保存しておくことができます。 最小値は1です(一度に生成する値が1つだけなので、キャッシュがない状態になります)。 指定がなければ、以前のキャッシュ値が保持されます。

CYCLE

CYCLEキーワードを使用すると、シーケンスが限界値(昇順の場合はmaxvalue、降順の場合はminvalue)に達した時、そのシーケンスを周回させることができます。 限界値に達した時、次に生成される番号は、昇順の場合はminvalue、降順の場合はmaxvalueになります。

NO CYCLE

NO CYCLEキーワードが指定されると、シーケンスの限界値に達した後のnextval呼び出しは全てエラーとなります。 CYCLENO 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は、同時に実行されるnextvalcurrvallastvalsetvalの呼び出しをブロックします。

歴史的な理由によりALTER TABLEはシーケンスにも使用することができます。 しかし、シーケンスに対して許されるALTER TABLEの構文は、上で示した構文と等価なものだけです。

serialというシーケンスを105から再開します。

ALTER SEQUENCE serial RESTART WITH 105;

互換性

ALTER SEQUENCEは、PostgreSQLの拡張であるASSTART WITHOWNED BYOWNER TORENAME TOSET SCHEMA構文を除いて、標準SQLに従っています。

関連項目

CREATE SEQUENCE, DROP SEQUENCE