★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 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 TYPE

ALTER TYPE — 型定義を変更する

概要

ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER TYPE name RENAME TO new_name
ALTER TYPE name SET SCHEMA new_schema
ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]
ALTER TYPE name action [, ... ]
ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]
ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value
ALTER TYPE name SET ( property = 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は既存の型の定義を変更します。 複数の副構文があります。

OWNER

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

RENAME

この構文は型の名前を変更します。

SET SCHEMA

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

RENAME ATTRIBUTE

この構文は複合型に対してのみ利用可能です。 型の個々の属性の名前を変更します。

ADD ATTRIBUTE

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

DROP ATTRIBUTE [ IF EXISTS ]

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

ALTER ATTRIBUTE ... SET DATA TYPE

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

ADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]

この構文は列挙型に新しい値を追加します。 列挙型の順序中での新しい値の場所は、既存の値のBEFOREまたはAFTERという形式で指定することができます。 指定がなければ新しい項目は値のリストの最後に追加されます。

IF NOT EXISTSが指定されている場合、型の中に新しい値が既に含まれていたとしてもエラーになりません。 注意が発生されますが、他の動作は行われません。 そうでなければ、新しい値がすでに存在しているとエラーが起こります。

RENAME VALUE

この構文では列挙型の値の名前を変更します。 列挙型の順序における値の位置は変更されません。 指定の値が存在しない、あるいは新しい名前が既に存在する場合はエラーが発生します。

SET ( property = value [, ... ] )

この構文は基本型に対してのみ適用可能です。 CREATE TYPEで設定できる基本型属性のサブセットを調整できます。 特に、以下の属性が変更できます。

  • RECEIVEでバイナリ入力関数の名前を設定できます。NONEはその型のバイナリ入力関数を削除します。 このオプションを使うにはスーパーユーザ権限が必要です。

  • SENDでバイナリ出力関数の名前を設定できます。NONEはその型のバイナリ出力関数を削除します。 このオプションを使うにはスーパーユーザ権限が必要です。

  • TYPMOD_INで型修飾子入力関数の名前を設定できます。NONEはその型の型修飾子入力関数を削除します。 このオプションを使うにはスーパーユーザ権限が必要です。

  • TYPMOD_OUTで型修飾子出力関数の名前を設定できます。NONEはその型の型修飾子出力関数を削除します。 このオプションを使うにはスーパーユーザ権限が必要です。

  • ANALYZEは型固有の統計情報収集関数の名前を設定できます。NONEはその型の統計情報収集関数を削除します。 このオプションを使うにはスーパーユーザ権限が必要です。

  • SUBSCRIPTは型固有の添字ハンドラ関数の名前を設定できます。NONEはその型の添字ハンドラ関数を削除します。 このオプションを使うにはスーパーユーザ権限が必要です。

  • STORAGE STORAGEplainextendedexternalmainに設定できます(それぞれが何を意味するかの詳細は73.2を参照してください)。 しかしながら、plainからその他の設定へ変更するにはスーパーユーザ権限が必要であり(その型のC関数がすべてTOASTの準備ができていることが必要だからです)、plainへその他の設定から変更することは全く許されていません(その型に、既にTOASTされた値がデータベース内にあるかもしれないためです)。 このオプションを変更することは、それだけでは格納されたデータを変更せず、今後作成されるテーブル列で使われるデフォルトのTOAST戦略を設定するだけであることに注意してください。 既存のテーブル列のTOAST戦略を変更するにはALTER TABLEを参照してください。

この型属性についての詳細はCREATE TYPEを参照してください。 基本型に対する属性の変更は、適切な場合その型に基づくドメインに自動的に伝播することに注意してください。

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

ALTER TYPEを使用するには型の所有者でなければなりません。 型のスキーマを変更するには、新しいスキーマにおけるCREATE権限も必要です。 所有者を変更するには、新しい所有者ロールに対してSET ROLEができなければなりません。また、そのロールは型のスキーマにおいてCREATE権限を持たなければなりません。 (この制限により、型の削除と再作成で行うことができない処理は所有者の変更で行えないようになります。 しかし、スーパーユーザはすべての型の所有者を変更することができます。) 属性を追加または属性の型の変更を行うためには、その属性のデータ型に対するUSAGE権限を持たなければなりません。

パラメータ

name

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

new_name

新しい型の名前です。

new_owner

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

new_schema

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

attribute_name

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

new_attribute_name

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

data_type

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

new_enum_value

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

neighbor_enum_value

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

existing_enum_value

名前の変更の対象となる既存の列挙型の値です。 すべての列挙型のリテラルと同様、引用符を付ける必要があります。

property

修正する基本型属性の名前です。可能な値については上を参照してください。

CASCADE

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

RESTRICT

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

注釈

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';

列挙型の値の名前を変更します。

ALTER TYPE colors RENAME VALUE 'purple' TO 'mauve';

既存の基本型に対するバイナリI/O関数を作成します。

CREATE FUNCTION mytypesend(mytype) RETURNS bytea ...;
CREATE FUNCTION mytyperecv(internal, oid, integer) RETURNS mytype ...;
ALTER TYPE mytype SET (
    SEND = mytypesend,
    RECEIVE = mytyperecv
);

互換性

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

関連項目

CREATE TYPE, DROP TYPE