ALTER FOREIGN TABLE — 外部テーブルの定義を変更する
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ]action[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ] RENAME [ COLUMN ]column_nameTOnew_column_nameALTER FOREIGN TABLE [ IF EXISTS ]nameRENAME TOnew_nameALTER FOREIGN TABLE [ IF EXISTS ]nameSET SCHEMAnew_schemaここでactionは以下のいずれかです。 ADD [ COLUMN ]column_namedata_type[ COLLATEcollation] [column_constraint[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name[ SET DATA ] TYPEdata_type[ COLLATEcollation] ALTER [ COLUMN ]column_nameSET DEFAULTexpressionALTER [ COLUMN ]column_nameDROP DEFAULT ALTER [ COLUMN ]column_name{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_nameSET STATISTICSintegerALTER [ COLUMN ]column_nameSET (attribute_option=value[, ... ] ) ALTER [ COLUMN ]column_nameRESET (attribute_option[, ... ] ) ALTER [ COLUMN ]column_nameSET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ALTER [ COLUMN ]column_nameOPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ]) ADDtable_constraint[ NOT VALID ] VALIDATE CONSTRAINTconstraint_nameDROP CONSTRAINT [ IF EXISTS ]constraint_name[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name| ALL | USER ] ENABLE TRIGGER [trigger_name| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_nameENABLE ALWAYS TRIGGERtrigger_nameSET WITH OIDS SET WITHOUT OIDS INHERITparent_tableNO INHERITparent_tableOWNER TO {new_owner| CURRENT_USER | SESSION_USER } OPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ])
ALTER FOREIGN TABLEは既存の外部テーブルの定義を変更します。
以下のように複数の副構文があります。
ADD COLUMNこの構文は、CREATE FOREIGN TABLEと同じ文法を使用して、外部テーブルに新しい列を追加します。 通常のテーブルに列を追加する場合と異なり、背後のストレージには何も起こりません。 この操作は単に、外部テーブルを通して何らかの新しい列がアクセスできるようになったことを宣言します。
DROP COLUMN [ IF EXISTS ]
この構文は外部テーブルから列を削除します。
ビューなど何らかのその他のテーブルがこの列に依存する場合、CASCADEを付けなければなりません。
IF EXISTSが指定された場合、列が存在しなくてもエラーになりません。
この場合、注意メッセージが代わりに発生します。
SET DATA TYPEこの構文は外部テーブルの列の型を変更します。 この場合も、背後のストレージには何の影響もありません。 この動作は単に、PostgreSQLが想定しているその列の型を変更するだけです。
SET/DROP DEFAULT
この構文は列に対するデフォルト値の設定または削除を行います。
デフォルト値はその後に行われるINSERTまたはUPDATEコマンドにのみ適用されます。
すでにテーブル内に存在する行の変更は行われません。
SET/DROP NOT NULL列にNULL値を許すか許さないかどうか印を付けます。
SET STATISTICSこの構文は、この後のANALYZE操作における列単位の統計情報収集目標を設定します。 詳細についてはALTER TABLEの類似の構文を参照してください。
SET ( attribute_option = value [, ... ] )RESET ( attribute_option [, ... ] )この構文は属性単位のオプションを設定またはリセットします。 詳細についてはALTER TABLEにおける類似の構文を参照してください。
SET STORAGE
この構文は、列のストレージモードを設定します。 詳しくはALTER TABLEの類似の構文を参照して下さい。 ストレージモードは、テーブルの外部データラッパがそれに注意するようになっていなければ、何の効果もないことに注意して下さい。
ADD table_constraint [ NOT VALID ]
この構文は、CREATE FOREIGN TABLEと同じ構文を使って、外部テーブルに新しい制約を追加します。
現在のところ、CHECK制約のみがサポートされています。
通常のテーブルに制約を追加する場合とは異なり、制約が正しいことを検証するために、何も実行されません。
そうではなく、この動作は単に、ある新しい条件が、外部テーブルのすべての行に対して成り立つことを仮定すべきだと宣言するものです。
(CREATE FOREIGN TABLEの記述を参照して下さい。)
制約がNOT VALIDであるとされている場合、それが成り立つことは仮定されず、将来利用される場合に備えて記録されているだけになります。
VALIDATE CONSTRAINT
この構文は、それまでNOT VALIDであるとされていた制約をvalidに変更します。
制約を検証するために何の動作も実行されませんが、以後の問い合わせではそれが成り立つと仮定されます。
DROP CONSTRAINT [ IF EXISTS ]
この構文は、外部テーブル上の指定された制約を削除します。
IF EXISTSが指定され、その制約が存在しない場合は、エラーにはなりません。
その場合、代わりに注意が発行されます。
DISABLE/ENABLE [ REPLICA | ALWAYS ] TRIGGERこれらの構文は外部テーブルに属するトリガーの発行について設定します。 詳細についてはALTER TABLEにおける類似の構文を参照してください。
SET WITH OIDS
この構文はテーブルにシステム列oidを追加します(5.4参照)。
テーブルに既にOIDがあるときは何もしません。
テーブルの外部データラッパがOIDをサポートしていない場合は、この列は単にゼロとして読み出されます。
これはADD COLUMN oid oidと同等ではないことに注意して下さい。
ADD COLUMN oid oidはoidという名前の通常の列を追加するのであって、システム列を追加するのではありません。
SET WITHOUT OIDS
この構文はテーブルからシステム列oidを削除します。
これは、既にoid列がない場合でもエラーにしないことを除けば、DROP COLUMN oid RESTRICTとまったく同等です。
INHERIT parent_tableこの構文は対象の外部テーブルを指定した親テーブルの新しい子テーブルとして追加します。 詳しくはALTER TABLEの類似の構文を参照して下さい。
NO INHERIT parent_tableこの構文は、対象の外部テーブルを指定した親テーブルの子テーブルのリストから削除します。
OWNERこの構文は外部テーブルの所有者を指定ユーザに変更します。
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )
外部テーブルもしくはその列の1つについてのオプションを変更します。
ADD、SET、DROPは実行する操作を指定します。
明示的な操作指定がない場合ADDとみなされます。
重複したオプション名は許されません。
(しかしテーブルオプションと列オプションとで同じ名前を持たせることは問題ありません。)
またオプションの名前と値は外部データラッパのライブラリを使用して検証されます。
RENAME
RENAME構文は外部テーブルの名前または外部テーブル内の個々の列の名前を変更します。
SET SCHEMAこの構文は外部テーブルを別のスキーマに移動します。
RENAMEおよびSET SCHEMA以外の操作はすべて、複数変更項目リストにまとめて並行に適用することができます。
例えば、複数の列の追加、複数の列の型変更、またはその両方を単一のコマンドで行うことができます。
コマンドがALTER FOREIGN TABLE IF EXISTS ...と記述されていて外部テーブルが存在しない場合、エラーにはなりません。
この場合、注意が発行されます。
ALTER FOREIGN TABLEを使用するためにはテーブルの所有者でなければなりません。
また外部テーブルのスキーマを変更するためには、新しいスキーマに対してCREATE権限を持っていなければなりません。
所有者を変更するためには、新しく所有者となるロールの直接的または間接的なメンバでなければなりません。
また新しく所有者となるロールはテーブルのスキーマに対してCREATE権限を持っていなければなりません。
(これらの制限により、テーブルの削除と再作成を行ってもできないことを所有者の変更で行えないようにします。
しかし、スーパーユーザはどのテーブルの所有者も変更できます。)
列の追加または列の型の変更を行うためには、そのデータ型に対するUSAGE権限も必要です。
name
変更対象の既存外部テーブルの名前(スキーマ修飾可)です。
テーブル名の前にONLYが指定されていた場合、そのテーブルのみが変更されます。
ONLYが指定されていない場合、そのテーブルと、そのすべての子孫のテーブル(あれば)が変更されます。
子孫のテーブルが含まれることを明示的に示すために、テーブル名の後に*を指定することができますが、これは省略可能です。
column_name新しい列または既存の列の名前です。
new_column_name既存の列に対する新しい名前です。
new_nameテーブルの新しい名前です。
data_type新しい列のデータ型、または既存の列に対する新しいデータ型です。
table_constraint外部テーブルの新しいテーブル制約です。
constraint_name削除する既存の制約の名前です。
CASCADE削除される列または制約に依存するオブジェクト(その列を参照するビューなど)を自動的に削除し、さらにそれらのオブジェクトに依存するすべてのオブジェクトも削除します(5.13参照)。
RESTRICT依存するオブジェクトが存在する場合、列または制約の削除を拒否します。 これがデフォルトの動作です。
trigger_name無効にする、あるいは有効にするトリガーの名前です。
ALL外部テーブルに属するすべてのトリガーを無効、あるいは有効にします。 (内部的に生成されたトリガーが含まれる場合、スーパーユーザー権限が必要です。 コアシステムは外部テーブルにそのようなトリガーを追加することはありませんが、アドオンが追加することはあり得ます。)
USER内部的に生成されたトリガーを除き、外部テーブルに属するすべてのトリガーを無効、あるいは有効にします。
parent_table外部テーブルと関連付ける、あるいは関連を取り消す親テーブルです。
new_ownerテーブルの新しい所有者のユーザ名です。
new_schemaテーブルの移動先となるスキーマの名前です。
COLUMNキーワードには意味がなく、省略可能です。
ADD COLUMNまたはDROP COLUMNにより列が追加、削除される時、NOT NULLまたはCHECK制約が追加される時、SET DATA TYPEにより列の型が変更される時、外部サーバとの一貫性は検査されません。
確実にテーブル定義をリモート側に合わせることはユーザの責任です。
有効なパラメータに関する詳しい説明についてはCREATE FOREIGN TABLEを参照してください。
列を非NULLと印付けします。
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
外部テーブルのオプションを変更します。
ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3 'value3');
ADD、DROP、SET DATA TYPE構文は標準SQLに準拠します。
他の構文は標準SQLに対するPostgreSQLの拡張です。
単一のALTER FOREIGN TABLEコマンドに複数の操作を指定する機能も拡張です。
ALTER FOREIGN TABLE DROP COLUMNを用いて外部テーブルのたった1つの列を削除してゼロ列のテーブルとすることができます。
これは拡張であり、SQLではゼロ列の外部テーブルを許しません。