CREATE FOREIGN DATA WRAPPER name [ HANDLER handler_function | NO HANDLER ] [ VALIDATOR validator_function | NO VALIDATOR ] [ OPTIONS ( option 'value' [, ... ] ) ]
CREATE FOREIGN DATA WRAPPERは新しい外部データラッパを作成します。 外部データラッパを定義したユーザがその所有者となります。
外部データラッパの名前はデータベース内で一意でなければなりません。
スーパーユーザのみが外部データラッパを作成することができます。
作成する外部データラッパの名前です。
handler_functionは、事前に登録された、外部テーブル向けの関数実行を受け付けるために呼び出される関数の名前です。 ハンドラ関数は引数を取らず、fdw_handler型を返すものでなければなりません。
ハンドラ関数を持たない外部データラッパを作成することもできますが、こうしたラッパを使用する外部テーブルは宣言することができるだけでアクセスできません。
validator_functionは、外部データラッパへ与える一般的なオプションと、その外部データラッパを使用する外部サーバとユーザマップへ与えるオプションを検査するために呼び出される、前もって登録された関数の名前です。
検証関数がない、またはNO VALIDATORが指定された場合、オプションは作成時に検査されません。
(実装に依存しますが、実行時外部データラッパは無効なオプション指定を無視することも拒絶することもできます。)
検証関数は2つの引数を取らなければなりません。
1つはtext[]型で、システムカタログ内に格納されたオプションの配列を含みます。
もう1つはoid型で、オプションを含むシステムカタログのOIDです。
戻り値の型は無視されます。
関数はereport()
関数を使用して無効なオプションを報告しなければなりません。
この句は新しい外部データラッパ用のオプションを指定します。 許されるオプション名と値は外部データラッパごとに固有であり、外部データラッパの検証関数を使用して検証されます。 オプション名は一意でなければなりません。
現在、外部データラッパには基本的な機能しかありません。 外部テーブルの更新をサポートしません。 また問い合わせの最適化は原始的です(ほとんどはラッパに任せられています)。
postgresql_fdw_validatorという1つの組込みの外部データラッパの検証関数が提供されています。 これはlibpq接続パラメータに対応したオプションを受け付けます。
無意味な外部データラッパdummyを作成します。
CREATE FOREIGN DATA WRAPPER dummy;
file_fdw_handlerハンドラ関数を持つ外部データラッパfileを作成します。
CREATE FOREIGN DATA WRAPPER file HANDLER file_fdw_handler;
いくつかオプションを付けた外部データラッパmywrapperを作成します。
CREATE FOREIGN DATA WRAPPER mywrapper OPTIONS (debug 'true');