このトピックでは、CREATE foreign tableを使用して新しい外部テーブルを定義する方法について説明します。
構文
CREATE FOREIGN TABLE [存在しない場合] table_name ( [存在しない場合])
{column_name data_type [ OPTIONS (オプション 'value' [, ... ] )) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
| table_constraint}
[, ... ]
])
[INHERITS ( parent_table [, ... ] ) ]
サーバーserver_name
[オプション (オプション 'value' [, ... ] ) ]
FOREIGN TABLE [存在しない場合] table_nameの作成
parent_table [ (
{column_name [オプション付き] [ column_constraint [ ... ] ]]
| table_constraint}
[, ... ]
) ] partition_bound_spec
サーバーserver_name
[オプション (オプション 'value' [, ... ] ) ] column_constraintの詳細:
[ CONSTRAINT constraint_name] {NOT NULL | NULL | チェック (式) [相続人なし] | DEFAULT default_expr | 常に生成される (generation_expr ) STORED }table_constraintの詳細:
[ CONSTRAINT constraint_name] チェック (式) [相続人なし]
使用上の注意
CREATE FOREIGN TABLEは、現在のデータベースに新しい外部テーブルを作成するために使用されます。 テーブルを作成したユーザーがテーブルの所有者になります。
スキーマ名を指定した場合、指定したスキーマにテーブルが作成されます。 例:
CREATE FOREIGN TABLE myschema.mytable.... それ以外の場合は、テーブルは現在のスキーマ内に作成されます。 外部テーブルの名前は、同じスキーマ内のテーブル、シーケンス、インデックス、ビュー、マテリアライズドビュー、およびその他の外部テーブルの名前とは異なる必要があります。CREATE FOREIGN TABLEは、外部テーブルの行の複合型を表すデータ型も自動的に作成します。 したがって、外部テーブルは、同じスキーマ内の既存のデータ型と同じ名前を持つことはできません。
PARTITION OF句が指定されている場合、テーブルは指定された境界を持つparent_tableのパーティションとして作成されます。
外部テーブルを作成する必要がある場合は、外部サーバーでのUSAGE特権と、テーブルで使用されるすべての列タイプでのUSAGE特権が必要です。
コンポーネント
コンポーネント | 説明 |
存在しない場合 | 同じ名前のリレーションがすでに存在する場合は、エラーをスローしないでください。 代わりに通知を発行します。 説明 既存のリレーションは、確立するリレーションとまったく同じではない場合があります。 |
table_name | 作成するテーブルの名前。 テーブルのスキーマを指定できます。 |
column_name | 新しいテーブルに作成される列の名前。 |
data_type | 列のデータ型。 有効なデータ型には、配列指定子が含まれます。 |
COLLATE照合 | COLLATE句は、並べ替え可能なデータ型である必要がある列に照合順序を割り当てます。 この句を指定しない場合、列のデータ型の既定の照合順序が使用されます。 |
INHERITS ( parent_table[, ... ] ) | オプションです。 INHERITS句は、新しい外部テーブルが自動的にすべての列を継承する親テーブルのリストを指定します。 親テーブルは、通常テーブルまたは外部テーブルにすることができます。 |
parent_tableFOR VALUES partition_bound_specのパーティション | PARTITION OF句。 この句を指定すると、指定された境界を持つ親テーブルのパーティションとしてテーブルが作成されます。 |
CONSTRAINT constraint_name | オプションです。 列またはテーブルの制約の名前。 制約に違反している場合は、エラーメッセージに制約名が表示されます。 |
NOT NULL | 列に null 値を含めることはできません。 |
NULL | 列には null 値を含めることができます。 デフォルトでは、null値が使用されます。 |
チェック (式) [相続人なし] | CHECK句は、ブール結果を生成する式を指定します。 外部テーブルの各行は、式を満たす必要があります。 外部テーブルのすべての行に対して、この式はTRUEまたはUNKNOWNを生成する必要がありますが、FALSEは生成しないでください。 列制約として指定されたチェック制約は、対応する列の値のみを参照する必要がありますが、テーブル制約に表示される式は複数の列を参照できます。 CHECK式には、現在の行の列以外のサブクエリまたは参照変数を含めることはできません。 式は NO INHERITでマークされた制約は、子テーブルに伝播されません。 説明 この句は、非標準SQLデータベースとの互換性のみを目的としており、推奨されません。 |
DEFAULT default_expr | DEFAULT句は、定義が句を含む列にデフォルトのデータ値を割り当てます。 値は変数を含まない式です。 式にサブクエリを含めることも、現在のテーブルの他の列を相互参照することもできません。 式のデータ型は、列のデータ型と一致する必要があります。 この式は、列の値を指定しない挿入操作で使用されます。 列にデフォルト値がない場合、デフォルト値はnullです。 |
常に (generation_expr) STOREDとして生成 | この句は、生成された列を作成します。 この列は書き込み不可能であり、列の読み取り時に指定された式の値を返します。 STOREDキーワードは、行の書き込み時に列の値が評価されることを示すために必要です。 値は、格納のために外部データラッパーに渡され、列が読み取られると返されます。 生成式は、テーブル内の他の列を参照できますが、生成された他の列は参照できません。 生成式は不変関数と演算子のみを使用でき、他のテーブルを参照できません。 |
server_name | 外部テーブルの既存の外部サーバーの名前。 |
オプション (option'value' [, ...] ) | 新しい外部テーブルまたはその列の1つに関連付けるオプション。 許可されるオプション名および値は、外部データラッパーに依存し、外部データラッパーの検証機能を使用して検証されます。 テーブルオプションと列オプションに同じ名前を使用する以外は, オプション名を重複して使用することはできません。 |
例
次のサンプルコードは、サーバーfilm_serverを使用して外部テーブルfilmsを作成し、テーブルにアクセスする方法を示しています。
FOREIGN TABLE foreign_tableの作成 (
id整数NOT NULL,
データテキスト
) SERVER foreign_server
オプション (schema_name 'some_schema' 、table_name 'some_table'); 外部テーブルを作成した後、通常のテーブルと同じ方法で外部テーブルのデータを照会および管理できます。