ALTER TYPE — 型定義を変更する
ALTER TYPEname
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER TYPEname
RENAME TOnew_name
ALTER TYPEname
SET SCHEMAnew_schema
ALTER TYPEname
RENAME ATTRIBUTEattribute_name
TOnew_attribute_name
[ CASCADE | RESTRICT ] ALTER TYPEname
action
[, ... ] ALTER TYPEname
ADD VALUE [ IF NOT EXISTS ]new_enum_value
[ { BEFORE | AFTER }neighbor_enum_value
] ALTER TYPEname
RENAME VALUEexisting_enum_value
TOnew_enum_value
ALTER TYPEname
SET (property
=value
[, ... ] ) ここでaction
は以下のいずれかです。 ADD ATTRIBUTEattribute_name
data_type
[ COLLATEcollation
] [ CASCADE | RESTRICT ] DROP ATTRIBUTE [ IF EXISTS ]attribute_name
[ CASCADE | RESTRICT ] ALTER ATTRIBUTEattribute_name
[ SET DATA ] TYPEdata_type
[ COLLATEcollation
] [ 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
STORAGE
はplain
、extended
、external
、main
に設定できます(それぞれが何を意味するかの詳細は73.2を参照してください)。
しかしながら、plain
からその他の設定へ変更するにはスーパーユーザ権限が必要であり(その型のC関数がすべてTOASTの準備ができていることが必要だからです)、plain
へその他の設定から変更することは全く許されていません(その型に、既にTOASTされた値がデータベース内にあるかもしれないためです)。
このオプションを変更することは、それだけでは格納されたデータを変更せず、今後作成されるテーブル列で使われるデフォルトのTOAST戦略を設定するだけであることに注意してください。
既存のテーブル列のTOAST戦略を変更するにはALTER TABLEを参照してください。
この型属性についての詳細はCREATE TYPEを参照してください。 基本型に対する属性の変更は、適切な場合その型に基づくドメインに自動的に伝播することに注意してください。
ADD ATTRIBUTE
、DROP ATTRIBUTE
、ALTER 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の拡張です。