他のバージョンの文書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

F.13. file_fdw

file_fdwモジュールは、サーバのファイルシステムにあるデータファイルにアクセスするのに使用できる外部データラッパfile_fdwを提供します。 データファイルはCOPY FROMで読むことのできるフォーマットでなければなりません。 詳細は COPY を参照してください。 そのようなデータへのアクセスは現時点では読み取り専用です。

このラッパーで作成された外部テーブルには以下のオプションを設定することができます。

filename

読み込むファイルを指定します。 必須です。 絶対パスでなければなりません。

format

ファイルフォーマットを指定するもので、COPYFORMATオプションと同じです。

header

ファイルがヘッダ行を持つか指定するもので、COPYHEADERオプションと同じです。

delimiter

ファイルのデリミタ文字を指定するもので、COPYDELIMITERオプションと同じです。

quote

ファイルの引用符文字を指定するもので、COPYQUOTEオプションと同じです。

escape

ファイルのエスケープ文字を指定するもので、COPYESCAPEオプションと同じです。

null

ファイルのnull文字列を指定するもので、COPYNULLオプションと同じです。

encoding

ファイルのエンコーディングを指定するもので、COPYENCODINGオプションと同じです。

COPYではOIDSやHEADERといったオプションを対応する値なしで指定できるのに対して、外部データラッパの構文では全ての場合において値を指定する必要がある点に注意してください。 通常値なしで指定されるCOPYオプションを有効にするには、代わりにTRUEを渡すことができます。

このラッパーを使って作られた外部テーブルのカラムは、以下のオプションを持つことができます。

force_not_null

これはbooleanオプションです。 真の場合は、このカラムの値はヌル値文字列(これはファイルレベルのnullオプションです)と比較されません。 これは、COPYFORCE_NOT_NULLオプションに列名を指定するのと同じ効果があります。

force_null

これはbooleanオプションです。 真の場合、ヌル値文字列と一致するこのカラムの値は、たとえ引用符で括られていたとしてもNULLと返されます。 このオプションがなければ、ヌル値文字列と一致する引用符で括られていない値のみがNULLと返されます。 これは、COPYFORCE_NULLオプションに列名を指定するのと同じ効果があります。

COPYOIDSFORCE_QUOTEの各オプションはfile_fdwでは現在サポートされていません。

これらのオプションは外部テーブルまたはその列にのみ指定可能で、file_fdw外部データラッパやそれを使用するサーバ、ユーザマッピングのオプションには指定できません。

どのファイルから読み込むかを決定できるのはスーパーユーザーのみでなければならない、というセキュリティ上の理由から、テーブルレベルのオプションを変更するにはスーパーユーザ権限が必要です。 原則としては非スーパーユーザはその他のオプションを変更することを許されてもよいのですが、現時点ではサポートされていません。

file_fdwを使用する外部テーブルでは、EXPLAINは読み込むファイルの名前を表示します。 COSTS OFFが指定されない場合は(バイト単位の)ファイルサイズも表示されます。

例F.1 PostgreSQL CSV ログ用の外部テーブル作成

file_fdwの明確な用途の一つはPostgreSQLの活動ログをテーブルとして検索できるようにすることです。 これを実現するには、ここではpglog.csvと呼ぶCSVファイルにログを記録している必要があります。 まず、file_fdwをエクステンションとしてインストールします。

CREATE EXTENSION file_fdw;

続いて外部サーバを作成します。

CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;

これで外部テーブルを作成する準備ができました。 CREATE FOREIGN TABLEコマンドを使って、テーブルのカラム、CSVファイル名とそのフォーマットを定義する必要があるでしょう。

CREATE FOREIGN TABLE pglog (
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text,
  session_id text,
  session_line_num bigint,
  command_tag text,
  session_start_time timestamp with time zone,
  virtual_transaction_id text,
  transaction_id bigint,
  error_severity text,
  sql_state_code text,
  message text,
  detail text,
  hint text,
  internal_query text,
  internal_query_pos integer,
  context text,
  query text,
  query_pos integer,
  location text,
  application_name text
) SERVER pglog
OPTIONS ( filename '/home/josh/9.1/data/pg_log/pglog.csv', format 'csv' );

これで全てです—もうあなたはログに直接検索を実行することができます。 実運用においては、もちろん何らかの方法でログを切り替える必要があるでしょう。