

# `ALTER SEQUENCE`
<a name="alter-sequence-syntax-support"></a>

`ALTER SEQUENCE` – シーケンスジェネレーターの定義を変更します。

**重要**  
シーケンスを使用する場合は、キャッシュ値を慎重に検討する必要があります。詳細については、「[`CREATE SEQUENCE`](create-sequence-syntax-support.md)」ページの重要なコールアウトを参照してください。  
ワークロードパターンに基づいてシーケンスを使用する最適な方法のガイダンスについては、「[シーケンスと ID 列の使用](sequences-identity-columns-working-with.md)」を参照してください。

## サポートされている構文
<a name="alter-sequence-supported-syntax"></a>

```
ALTER SEQUENCE [ IF EXISTS ] name
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ [ NO ] CYCLE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ]
    [ OWNED BY { table_name.column_name | NONE } ]
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

where cache is 1 or cache >= 65536
```

## 説明
<a name="alter-sequence-description"></a>

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

`ALTER SEQUENCE` を使用するには、シーケンスを所有している必要があります。シーケンスのスキーマを変更するには、新しいスキーマに対する `CREATE` 権限も必要です。所有者を変更するには、新しい所有者ロールに対して `SET ROLE` ができなければなりません。また、そのロールにはシーケンスのスキーマに対する `CREATE` 権限が必要です。(これらの制限により、所有者を変更しても、シーケンスを削除して再作成することでできること以上のことは何も行われません。ただし、スーパーユーザーは、どのシーケンスの所有権も変更できます。)

## パラメータ
<a name="alter-sequence-parameters"></a>

***.name***  
変更するシーケンスの名前 (オプションでスキーマ修飾)。

**`IF EXISTS`**  
シーケンスが存在しなかったとしてもエラーになりません。この場合、通知が発行されます。

***増分***  
`INCREMENT BY increment` 句はオプションです。正の値を指定すると昇順のシーケンスになり、負の値を指定すると降順のシーケンスになります。指定しない場合は、古い増分値は維持されます。

***minvalue* / `NO MINVALUE`**  
オプションの `MINVALUE minvalue` 句は、シーケンスが生成できる最小値を決定します。`NO MINVALUE` を指定した場合、デフォルトとして昇順シーケンスでは 1、降順シーケンスではデータ型の最小値がそれぞれ使用されます。どちらのオプションも指定しない場合、現在の最小値が維持されます。

***maxvalue* / `NO MAXVALUE`**  
オプションの `MAXVALUE maxvalue` 句は、シーケンスの最大値を決定します。`NO MAXVALUE` を指定した場合、デフォルトとして昇順シーケンスではデータ型の最大値、降順シーケンスでは -1 がそれぞれ使用されます。どちらのオプションも指定しない場合、現在の最大値が維持されます。

**`CYCLE`**  
オプションの `CYCLE` キーワードを使用すると、昇順または降順のシーケンスがそれぞれ *maxvalue* または *minvalue* に達したときに、シーケンスをラップアラウンドすることができます。制限に達すると、生成される次の数値はそれぞれ *minvalue* または *maxvalue* になります。

**`NO CYCLE`**  
オプションの `NO CYCLE` キーワードを指定した場合、シーケンスが最大値に達した後に `nextval` を呼び出すと、エラーが返されます。`CYCLE` または `NO CYCLE` が指定されていない場合、古いサイクル動作が維持されます。

***開始***  
オプションの `START WITH start` 句は、シーケンスの記録された開始値を変更します。これは現在のシーケンス値には影響しません。将来の `ALTER SEQUENCE RESTART` コマンドが使用する値を設定するだけです。

***再起動***  
オプションの `RESTART [ WITH restart ]` 句は、シーケンスの現在の値を変更します。これは、`is_called` = `false` で `setval` 関数を呼び出す場合と似ています。指定された値は、次の `nextval` 呼び出しによって返されます。*restart* 値を指定せずに `RESTART` を書き込むことは、`CREATE SEQUENCE` によって記録された開始値、または `ALTER SEQUENCE START WITH` によって最後に設定された開始値を指定することと同じです。  
`setval` 呼び出しとは対照的に、シーケンスに対する `RESTART` オペレーションはトランザクションであり、同時トランザクションが同じシーケンスから番号を取得するのをブロックします。これが目的のオペレーションモードではない場合は、`setval` を使用する必要があります。

***キャッシュ***  
`CACHE cache` 句を使用すると、シーケンス番号を事前に割り当ててメモリに保存し、アクセスを高速化できます。値は 1 または 65536 以上の値のいずれかである必要があります。指定しない場合、古いキャッシュ値が維持されます。キャッシュ動作の詳細については、「[`CREATE SEQUENCE`](create-sequence-syntax-support.md)」のガイダンスを参照してください。

**`OWNED BY table_name.column_name` / `OWNED BY NONE`**  
`OWNED BY` オプションを使用すると、シーケンスが特定のテーブル列に関連付けられるため、その列 (またはそのテーブル全体) が削除されると、シーケンスも自動的に削除されます。指定した場合、この関連付けは、シーケンスに対して以前に指定された関連付けを置き換えます。指定されたテーブルは、シーケンスと同じ所有者を持ち、同じスキーマにある必要があります。`OWNED BY NONE` を指定すると、既存の関連付けが削除され、シーケンスが「フリースタンディング」になります。

***new\$1owner***  
シーケンスの新しい所有者のユーザー名です。

***new\$1name***  
シーケンスの新しい名前。

***new\$1schema***  
シーケンスの新しいスキーマ。

## 注意事項
<a name="alter-sequence-notes"></a>

`ALTER SEQUENCE` は、現在のバックエンド以外の、事前に割り当てられた (キャッシュされた) シーケンス値を持つバックエンドの `nextval` の結果にすぐには影響しません。変更されたシーケンス生成パラメータが認識される前に、キャッシュされたすべての値を使い果たします。現在のバックエンドはすぐに影響を受けます。

`ALTER SEQUENCE` はシーケンスの `currval` ステータスには影響しません。

`ALTER SEQUENCE` は、他のトランザクションに OCC を引き起こす可能性があります。

歴史上の理由から、`ALTER TABLE` はシーケンスでも使用できますが、シーケンスで許可される `ALTER TABLE` のバリエーションは、上記の形式と同等のものだけです。

## 例
<a name="alter-sequence-examples"></a>

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

```
ALTER SEQUENCE serial RESTART WITH 105;
```

## 互換性
<a name="alter-sequence-compatibility"></a>

`ALTER SEQUENCE` は、PostgreSQL 拡張機能である `AS`、`START WITH`、`OWNED BY`、`OWNER TO`、`RENAME TO`、および `SET SCHEMA` 句を除き、SQL 標準に準拠しています。