ALTER TYPE
は、既存の型の定義を変更します。
説明
ALTER TYPE
は、既存の型の定義を変更します。 いくつかのサブフォームがあります。
所有者
: このフォームは、タイプの所有者を変更します。RENAME
: このフォームは、型の名前を変更します。SET SCHEMA
: このフォームは、型を別のスキーマに移動します。RENAME ATTRIBUTE
: このフォームは複合タイプでのみ使用できます。 タイプの個々の属性の名前を変更します。属性の追加
: このフォームは、CREATE type
と同じ構文を使用して、複合型に新しい属性を追加します。DROP ATTRIBUTE [ IF EXISTS ]
: このフォームは、複合型から属性を削除します。If EXISTS
が指定され、属性が存在しない場合、エラーはスローされません。 この場合、代わりに通知が発行されます。ALTER ATTRIBUTE... SET DATA TYPE
: このフォームは、複合タイプの属性のタイプを変更します。ADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]
: このフォームは、enum型に新しい値を追加します。 enumの順序付けにおける新しい値の位置は、既存の値のbeingBEFOREorAFTERoneとして指定できます。 それ以外の場合、新しい項目は値のリストの最後に追加されます。If NOT EXISTS
が指定されている場合、型に新しい値がすでに含まれている場合はエラーではありません。通知が発行されますが、他のアクションは実行されません。 それ以外の場合、新しい値がすでに存在する場合はエラーが発生します。RENAME VALUE
: このフォームは、enum型の値の名前を変更します。 enumの順序での値の位置は影響を受けません。 指定された値が存在しないか、または新しい名前がすでに存在する場合、エラーが発生します。SET (property=value [, ... ] )
: このフォームは基本型にのみ適用されます。 CREATE typeで設定できる基本型プロパティのサブセットを調整できます。 具体的には、これらのプロパティを変更できます。RECEIVEをバイナリ入力関数の名前に設定するか、NONEを設定して型のバイナリ入力関数を削除できます。 このオプションを使用するには、スーパーユーザー権限が必要です。
SENDをバイナリ出力関数の名前に設定するか、NONEを設定して型のバイナリ出力関数を削除できます。 このオプションを使用するには、スーパーユーザー権限が必要です。
TYPMOD_INを型修飾子入力関数の名前に設定するか、型の型修飾子入力関数を削除するにはNONEを設定できます。 このオプションを使用するには、スーパーユーザー権限が必要です。
TYPMOD_OUTを型修飾子出力関数の名前に設定するか、型の型修飾子出力関数を削除するにはNONEを設定できます。 このオプションを使用するには、スーパーユーザー権限が必要です。
ANALYZEは、型固有の統計収集関数の名前に設定することも、型の統計収集関数を削除するにはNONEに設定することもできます。 このオプションを使用するには、スーパーユーザー権限が必要です。
STORAGEは、プレーン、拡張、外部、ormainに設定できます (これらの意味についての詳細は70.2for) 。 ただし、fromplaintoの別の設定を変更するには、スーパーユーザー特権が必要です (タイプのC関数がすべてTOAST対応である必要があるため) 。また、toplainfromの別の設定を変更することはまったく許可されません (タイプがデータベースにTOASTed値をすでに持っている可能性があるため) 。 このオプションを変更しても、保存されたデータは変更されず、将来作成されるテーブル列に使用されるデフォルトのTOAST戦略が設定されるだけであることに注意してください。 既存のテーブル列のTOAST戦略を変更するには、ALTER TABLEを参照してください。
必要に応じて、基本型のこれらのプロパティの変更は、その型に基づいてドメインに自動的に反映されることに注意してください。
ADD ATTRIBUTE、DROP ATTRIBUTE、およびALTER ATTRIBUTEアクションは、並列に適用する複数の変更のリストに組み合わせることができる。 例えば、いくつかの属性を追加し、および /または単一のコマンドでいくつかの属性のタイプを変更することが可能である。
ALTER typeを使用するには、型を所有する必要があります。 型のスキーマを変更するには、新しいスキーマに対するCREATE権限も必要です。 所有者を変更するには、新しい所有ロールの直接または間接のメンバーである必要があります。また、そのロールは型のスキーマに対するCREATE権限を持つ必要があります。 (これらの制限により、所有者を変更しても、型を削除して再作成できないことは何もしません。 ただし、スーパーユーザーは任意のタイプの所有権を変更できます。属性を追加したり属性型を変更したりするには、属性のデータ型に対するUSAGE特権も必要です。
概要
ALTER TYPE名の所有者を {new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER} にALTER TYPE名RENAME TO new_name
ALTER TYPE名SET SCHEMA new_schema
ALTER TYPE name RENAME ATTRIBUTE attribute_nameからnew_attribute_nameへ [CASCADE | RESTRICT]
ALTER TYPE名アクション [, ... ]
ALTER TYPE名ADD VALUE [存在しない場合] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value]
ALTER TYPE名RENAME VALUE existing_enum_valueにnew_enum_value
ALTER TYPE名SET ( property = value [, ... ] )
アクションは次のいずれかです。
ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT]
ドロップATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT]
ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]
パラメーター
name
: 変更する既存の型の名前 (おそらくスキーマ修飾) 。new_name
: 型の新しい名前。new_owner
: タイプの新しい所有者のユーザー名。new_schema
: 型の新しいスキーマです。attribute_name
: 追加、変更、または削除する属性の名前。new_attribute_name
: 名前を変更する属性の新しい名前。data_type
: 追加する属性のデータ型、または変更する属性の新しい型。new_enum_value
: enum型の値のリストに追加される新しい値、または既存の値に与えられる新しい名前。 すべてのenumリテラルと同様に、引用する必要があります。neighbor_enum_value
: enum型のソート順序の直前または直後に新しい値を追加する必要がある既存のenum値。 すべてのenumリテラルと同様に、引用する必要があります。existing_enum_value
: 名前を変更する必要がある既存のenum値。 すべてのenumリテラルと同様に、引用する必要があります。property
: 変更する基本型プロパティの名前。可能な値については、上記を参照してください。CASCADE
: 変更される型の型指定されたテーブルとその子孫に操作を自動的に伝播します。RESTRICT
: 変更される型が型付きテーブルの型である場合、操作を拒否します。 この値がデフォルトです。
注
ALTER TYPEの場合... ADD VALUE
(enum型に新しい値を追加する形式) はトランザクションブロック内で実行され、トランザクションがコミットされるまで新しい値を使用できません。 追加されたenum値を含む比較は、enum型の元のメンバーのみを含む比較よりも遅い場合があります。 これは通常、BEFOREまたはAFTERを使用して新しい値のソート位置をリストの最後以外の場所に設定する場合にのみ発生します。 ただし、新しい値が最後に追加されても、これが発生することがあります (これは、enum型の最初の作成以降にOIDカウンタが「ラップアラウンド」した場合に発生します) 。 スローダウンは通常重要ではありませんが、重要な場合は、enum型を削除して再作成するか、データベースをダンプして復元することで、最適なパフォーマンスを取り戻すことができます。
例
データ型の名前を変更するには:
ALTER TYPE electronic_mail RENAME TO email;
タイプemailの所有者をjoeに変更するには:
ALTERタイプの電子メール所有者にジョー;
タイプ電子メールのスキーマを顧客に変更するには:
ALTERのタイプ電子メールセットSCHEMAの顧客;
複合型に新しい属性を追加するには:
ALTER TYPE compfoo ADD属性f3 int;
特定のソート位置の列挙型に新しい値を追加するには:
ALTER TYPEカラーは、「赤」の後に値「オレンジ」を追加します。
enum値の名前を変更するには:
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のタイプmytypeのセット (
SEND = mytypesend、
RECEIVE = mytyperecv
);