PostgreSQL 9.0.0文書
前のページ | 巻戻し |  | 早送り | 次のページ

# ALTER SEQUENCE

## 名前

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

## 概要

    ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]
        [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
        [ START [ WITH ] start ]
        [ RESTART [ [ WITH ] restart ] ]
        [ CACHE cache ] [ [ NO ] CYCLE ]
        [ OWNED BY { table.column | NONE } ]
    ALTER SEQUENCE name OWNER TO new_owner
    ALTER SEQUENCE name RENAME TO new_name
    ALTER SEQUENCE name SET SCHEMA new_schema

## 説明

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

`ALTER SEQUENCE`を使用するには、シーケンスの所有者でなければなりません。 シーケンスのスキーマを変更するには、新しいスキーマにおける`CREATE`権限も持たなければなりません。 所有者を変更するには、新しく所有者となるロールの直接または間接的なメンバでなければなりません。 またそのロールはシーケンスのスキーマ上に`CREATE`権限を持たなければなりません。 （これらの制限は、シーケンスの削除または再作成によりユーザが実行できないことを、所有者の変更により実行されないことを確実にするためのものです。 しかし、スーパーユーザはすべてのシーケンスの所有者を変更することができます。）

## パラメータ

`name`

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

`increment`

  `INCREMENT BY `increment``句は省略可能です。 正の値が指定された時は昇順のシーケンス、負の値が指定された時は降順のシーケンスを作成します。 指定がない場合、以前の増分値が保持されます。

`minvalue`
`NO MINVALUE`

  `MINVALUE `minvalue``はシーケンスジェネレータが生成する最小値を決定します。 `NO MINVALUE`が指定された場合、昇順の時は1、降順の時は-(263-1)がデフォルトになります。 どちらのオプションも指定されていなければ、現在の最小値が保持されます。

`maxvalue`
`NO MAXVALUE`

  `MAXVALUE `maxvalue``はシーケンスが生成する最大値を決定します。 `NO MAXVALUE`が指定された場合、昇順の時は263-1、降順の時は-1がデフォルトになります。 どちらのオプションも指定されていなければ、現在の最大値が保持されます。

`start`

  省略可能な`START WITH `start``句は、記録されているシーケンスの開始値を変更します。 これは現在のシーケンス値に影響しません。 単に将来実行される`ALTER SEQUENCE RESTART`コマンドが使用する値を設定するだけです。

`restart`

  省略可能な`START WITH `start``句は、シーケンスの現在値を変更します。 これは`is_called` = `false`付きで`setval`関数を呼び出すことと同じです。 指定した値は次の`nextval`呼出時に返されます。 `restart`を付けずに`RESTART`と記述することは、`CREATE SEQUENCE`で記録、または前回`ALTER SEQUENCE START WITH`で設定された開始値を指定したことと同じです。

`cache`

  `CACHE `cache``句を使用すると、アクセスを高速化するために、シーケンス番号を事前に割り当て、メモリに保存しておくことができます。 最小値は1です（一度に生成する値が1つだけなので、キャッシュがない状態になります）。 指定がなければ、以前のキャッシュ値が保持されます。

`CYCLE`

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

`NO CYCLE`

  `NO CYCLE`キーワードが指定されると、シーケンスの限界値に達した後の`nextval`呼び出しは全てエラーとなります。このキーワードは省略可能です。 `CYCLE`も`NO CYCLE`も指定されていない場合は、以前の周回動作が保持されます。

`OWNED BY` `table`.`column`
`OWNED BY NONE`

  `OWNED BY`オプションにより、シーケンスは指定されたテーブル列に関連付けされ、その列（やテーブル全体）が削除されると、自動的にシーケンスも同様に削除されるようになります。 指定があると、以前に指定されたシーケンスの関連は、指定された関連に置き換えられます。 指定するテーブルは、シーケンスと同一所有者でなければならず、また、同一のスキーマ内に存在しなければなりません。 `OWNED BY NONE`を指定することで、既存の関連は削除され、シーケンスは"独立"したものになります。

`new_owner`

  シーケンスの新しい所有者のユーザ名です。

`new_name`

  シーケンスの新しい名称です。

`new_schema`

  シーケンスの新しいスキーマです。

## 注釈

同じシーケンスから番号を取得するトランザクションの同時実行ブロックを防ぐために、シーケンス生成パラメータに関する`ALTER SEQUENCE`の操作はロールバックできません。 `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に従っています。

## 関連項目

CREATE SEQUENCE, DROP SEQUENCE

前のページ | ホーム | 次のページ
ALTER SCHEMA | 上に戻る | ALTER SERVER