他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER FOREIGN TABLE

ALTER FOREIGN TABLE — 外部テーブルの定義を変更する

概要

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 | DEFAULT }
    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 WITHOUT OIDS
    INHERIT parent_table
    NO INHERIT parent_table
    OWNER TO { new_owner | CURRENT_ROLE | 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 WITHOUT OIDS

システム列oidを削除する、後方互換のための構文です。 システム列oidは今では追加できませんので、これは効果がありません。

INHERIT parent_table

この構文は対象の外部テーブルを指定した親テーブルの新しい子テーブルとして追加します。 詳しくはALTER TABLEの類似の構文を参照して下さい。

NO INHERIT parent_table

この構文は、対象の外部テーブルを指定した親テーブルの子テーブルのリストから削除します。

OWNER

この構文は外部テーブルの所有者を指定ユーザに変更します。

OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] )

外部テーブルもしくはその列の1つについてのオプションを変更します。 ADDSETDROPは実行する操作を指定します。 明示的な操作指定がない場合ADDとみなされます。 重複したオプション名は許されません。 (しかしテーブルオプションと列オプションとで同じ名前を持たせることは問題ありません。) またオプションの名前と値は外部データラッパーのライブラリを使用して検証されます。

RENAME

RENAME構文は外部テーブルの名前または外部テーブル内の個々の列の名前を変更します。

SET SCHEMA

この構文は外部テーブルを別のスキーマに移動します。

RENAMEおよびSET SCHEMA以外の操作はすべて、複数変更項目リストにまとめて並行に適用することができます。 例えば、複数の列の追加、複数の列の型変更、またはその両方を単一のコマンドで行うことができます。

コマンドがALTER FOREIGN TABLE IF EXISTS ...と記述されていて外部テーブルが存在しない場合、エラーにはなりません。 この場合、注意が発行されます。

ALTER FOREIGN TABLEを使用するためにはテーブルの所有者でなければなりません。 また外部テーブルのスキーマを変更するためには、新しいスキーマに対してCREATE権限を持っていなければなりません。 所有者を変更するには、新しい所有者ロールに対してSET ROLEができなければなりません。また、そのロールはテーブルのスキーマにおいてCREATE権限を持たなければなりません。 (これらの制限により、テーブルの削除と再作成を行ってもできないことを所有者の変更で行えないようにします。 しかし、スーパーユーザはどのテーブルの所有者も変更できます。) 列の追加または列の型の変更を行うためには、そのデータ型に対するUSAGE権限も必要です。

パラメータ

name

変更対象の既存外部テーブルの名前(スキーマ修飾可)です。 テーブル名の前にONLYが指定されていた場合、そのテーブルのみが変更されます。 ONLYが指定されていない場合、そのテーブルと、そのすべての子孫のテーブル(あれば)が変更されます。 子孫のテーブルが含まれることを明示的に示すために、テーブル名の後に*を指定することができますが、これは省略可能です。

column_name

新しい列または既存の列の名前です。

new_column_name

既存の列に対する新しい名前です。

new_name

テーブルの新しい名前です。

data_type

新しい列のデータ型、または既存の列に対する新しいデータ型です。

table_constraint

外部テーブルの新しいテーブル制約です。

constraint_name

削除する既存の制約の名前です。

CASCADE

削除される列または制約に依存するオブジェクト(その列を参照するビューなど)を自動的に削除し、さらにそれらのオブジェクトに依存するすべてのオブジェクトも削除します(5.14参照)。

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);

互換性

ADDDROPSET DATA TYPE構文は標準SQLに準拠します。 他の構文は標準SQLに対するPostgreSQLの拡張です。 単一のALTER FOREIGN TABLEコマンドに複数の操作を指定する機能も拡張です。

ALTER FOREIGN TABLE DROP COLUMNを用いて外部テーブルのたった1つの列を削除してゼロ列のテーブルとすることができます。 これは拡張であり、SQLではゼロ列の外部テーブルを許しません。

関連項目

CREATE FOREIGN TABLE, DROP FOREIGN TABLE