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