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

# ALTER TYPE

## 名前

ALTER TYPE -- 型定義を変更する

## 概要

    ALTER TYPE name action [, ... ]
    ALTER TYPE name OWNER TO new_owner
    ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name
    ALTER TYPE name RENAME TO new_name [ CASCADE | RESTRICT ]
    ALTER TYPE name SET SCHEMA new_schema
    ALTER TYPE name ADD VALUE new_enum_value [ { BEFORE | AFTER } existing_enum_value ]

    ここでactionは以下のいずれかです。
        ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
        DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]
        ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]

## 説明

`ALTER TYPE`は既存の型の定義を変更します。 複数の副構文があります。

`ADD ATTRIBUTE`

  この構文は、CREATE TYPEと同じ構文を用いて、複合型に新しい属性を追加します。

`DROP ATTRIBUTE [ IF EXISTS ]`

  この構文は複合型から属性を削除します。 `IF EXISTS`が指定された時にその属性が存在しないでもエラーにはなりません。 この場合は代わりに注意が発せられます。

`SET DATA TYPE`

  この構文は複合型の属性の型を変更します。

`OWNER`

  この構文は型の所有者を変更します。

`RENAME`

  この構文は型の名前または複合型の個々の属性の名前を変更します。

`SET SCHEMA`

  この構文は型を他のスキーマに移動します。

`ADD VALUE [ BEFORE | AFTER ]`

  この構文は列挙型に新しい値を追加します。 `BEFORE`または`AFTER`によって列挙型の順番における新しい値の場所が指定されていない場合、新しい項目は値リストの最後に格納されます。

`CASCADE`

  自動的に変更される型で型付けされたテーブルとその子テーブルにこの操作を伝播します。

`RESTRICT`

  変更対象の型がテーブルの型付けに使用されている場合に拒絶します。 これがデフォルトです。

`ADD ATTRIBUTE`、`DROP ATTRIBUTE`、`ALTER ATTRIBUTE`操作は複数の変更リストにまとめて、並行して適用することができます。 例えば、複数の属性の追加、複数の属性の変更、またはその両方を１つのコマンドで実行することができます。

`ALTER TYPE`を使用するには型の所有者でなければなりません。 型のスキーマを変更するには、新しいスキーマにおける`CREATE`権限も必要です。 所有者を変更するには、直接または間接的に新しい所有者ロールのメンバでなければなりません。 また、そのロールが型のスキーマにおいて`CREATE`を持たなければなりません。 （この制限により、強制的に、所有者の変更が型の削除と再作成で行うことができない何らかの処理を行わないようになります。 しかし、スーパーユーザはすべての型の所有者を変更することができます。）

## パラメータ

`name`

  変更対象の既存の型の名前です（スキーマ修飾名も可）。

`new_name`

  新しい型の名前です。

`new_owner`

  新しい型の所有者のユーザ名です。

`new_schema`

  型の新しいスキーマです。

`attribute_name`

  追加、変更または削除する属性の名前です。

`new_attribute_name`

  変名する属性の新しい名前です。

`data_type`

  追加する属性のデータ型、または、変更する属性の新しい型です。

`new_enum_value`

  列挙型リストの値に追加する新しい値です。 すべての列挙型のリテラル同様、引用符を付けなければなりません。

`existing_enum_value`

  列挙型の並び順序において新しい値をその直前または直後に追加する、既存の列挙型の値です。 すべての列挙型のリテラル同様、引用符を付けなければなりません。

## 注意

`ALTER TYPE ... ADD VALUE`（列挙型に新しい値を追加する構文）はトランザクションブロック内で実行することはできません。

追加された列挙型の値を含む比較は、列挙型の元々の要素のみを含む比較よりも低速になることがあります。 通常これは、新しい値のソート位置がリストの最後ではなく`BEFORE`または`AFTER`を用いて設定された場合のみで起こります。 しかし最後に新しい値が追加された場合であっても起こる可能性があります。 （これは、OIDカウンタが元の列挙型を作成してから"周回"した場合に起こります。） この低下は通常は大きくありません。 しかしこれが問題であれば、列挙型を削除し再作成する、あるいはデータベースをダンプし再ロードすることで最適な性能まで戻すことができます。

## 例

データ型の名前を変更します。

    ALTER TYPE electronic_mail RENAME TO email;

`email`型の所有者を`joe`に変更します。

    ALTER TYPE email OWNER TO joe;

`email`型のスキーマを`customers`に変更します。

    ALTER TYPE email SET SCHEMA customers;

型に新しい属性を追加します。

    ALTER TYPE compfoo ADD ATTRIBUTE f3 int;

列挙型の特定のソート位置に新しい値を追加します。

    ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';

## 互換性

属性の追加および削除を行う構文は標準SQLの一部です。 他の構文はPostgreSQLの拡張です。

## 関連項目

CREATE TYPE, DROP TYPE

前のページ | ホーム | 次のページ
ALTER TRIGGER | 上に戻る | ALTER USER