ALTER FOREIGN TABLE — 外部テーブルの定義を変更する
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ]action
[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ] RENAME [ COLUMN ]column_name
TOnew_column_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
RENAME TOnew_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
SET SCHEMAnew_schema
ここでaction
は以下のいずれかです。 ADD [ COLUMN ]column_name
data_type
[ COLLATEcollation
] [column_constraint
[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name
[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name
[ SET DATA ] TYPEdata_type
[ COLLATEcollation
] ALTER [ COLUMN ]column_name
SET DEFAULTexpression
ALTER [ COLUMN ]column_name
DROP DEFAULT ALTER [ COLUMN ]column_name
{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_name
SET STATISTICSinteger
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
'] [, ... ]) ADDtable_constraint
[ NOT VALID ] VALIDATE CONSTRAINTconstraint_name
DROP CONSTRAINT [ IF EXISTS ]constraint_name
[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_name
ENABLE ALWAYS TRIGGERtrigger_name
SET WITH OIDS SET WITHOUT OIDS INHERITparent_table
NO INHERITparent_table
OWNER 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ではゼロ列の外部テーブルを許しません。