

# `ALTER TABLE`
<a name="alter-table-syntax-support"></a>

`ALTER TABLE` は、テーブルの定義を変更します。

```
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    action [, ... ]
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME [ COLUMN ] column_name TO new_column_name
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER TABLE [ IF EXISTS ] name
    RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name
    SET SCHEMA new_schema

where action is one of:

    ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type
    ADD table_constraint_using_index
    ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...]
    ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

and table_constraint_using_index is:

    [ CONSTRAINT constraint_name ]
    UNIQUE USING INDEX index_name
```

## ID 列のアクション
<a name="alter-table-identity-columns"></a>

**`SET GENERATED { ALWAYS | BY DEFAULT }` / `SET {{sequence_option}}` / `RESTART`**  
これらのフォームは、列が ID 列であるかどうかを変更したり、既存の ID 列の生成属性を変更したりします。詳細については、「[`CREATE TABLE`](create-table-syntax-support.md)」を参照してください。`SET DEFAULT` と同様に、これらの形式は後続の `INSERT` コマンドと `UPDATE` コマンドの動作にのみ影響します。テーブル内の既存の行が変更されることはありません。  
{{sequence\_option}} は、`INCREMENT BY` などの [`ALTER SEQUENCE`](alter-sequence-syntax-support.md) でサポートされるオプションです。これらのフォームは、既存の ID 列の基盤となるシーケンスを変更します。

**`DROP IDENTITY [ IF EXISTS ]`**  
このフォームは、列から ID プロパティを削除します。`DROP IDENTITY IF EXISTS` が指定されていて、列が ID 列でない場合、エラーはスローされません。この場合、代わりに通知が発行されます。

## 制約アクションを追加する
<a name="alter-table-add-constraint"></a>

**`ADD {{table_constraint_using_index}}`**  
このフォームは、既存の一意のインデックスに基づいてテーブルに新しい `UNIQUE` 制約を追加します。インデックスのすべての列が制約に含まれます。  
インデックスは `VALID` 状態である必要があります。インデックスが現在構築中である場合、そのインデックスを使用して一意の制約を追加することはサポートされていません。  
制約名を指定すると、制約名と一致するようにインデックス名が変更されます。指定しない場合、制約はインデックスと同じ名前になります。  
このコマンドを実行すると、インデックスは通常の `CREATE UNIQUE INDEX ASYNC` コマンドで構築した場合と同じ方法で、制約によって「所有」されます。特に、制約を削除すると、インデックスも消えます。