PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# F.14. file_fdw

`file_fdw`模块提供了外部数据封装器`file_fdw`， 可以用来在服务器的文件系统中访问数据文件。数据文件必须是`COPY FROM` 可读的格式；参阅COPY获取细节。访问这样的数据文件当前只是可读的。

使用这个封装器创建的外部表可以有下列选项：

`filename`

  指定要读取的文件。这是必需的。必须是一个绝对路径名。

`format`

  指定文件的格式，与`COPY`的`FORMAT`选项相同。

`header`

  指定文件是否有标题行，与`COPY`的`HEADER`选项相同。

`delimiter`

  指定文件的分隔符，与`COPY`的`DELIMITER`选项相同。

`quote`

  指定文件的引用字符，与`COPY`的`QUOTE`选项相同。

`escape`

  指定文件的转义字符，与`COPY`的`ESCAPE`选项相同。

`null`

  指定文件的null字符串，与`COPY`的`NULL`选项相同。

`encoding`

  指定文件的编码，与`COPY`的`ENCODING`选项相同。

请注意，当`COPY`允许的选项如OIDS和HEADER不带有相应的值被声明时， 外部数据封装器语法在所有的情况下都需要一个值。要激活`COPY` 选项通常不提供值，不过你可以传递值TRUE。

用这个触发器创建的外部表的一个字段可以有下列的选项：

`force_not_null`

  这是一个布尔选项。如果为真，则声明字段的值不应该匹配空字符串（也就是， 文件级别`null`选项）。这与列出`COPY`的 `FORCE_NOT_NULL`选项里的字段有相同的效果。

`force_null`

  这是一个布尔选项。如果为真，它声明匹配空字符串的字段的值作为`NULL` 返回，即使该值加了引号。没有这个选项，只有未加引号的匹配该空字符串的值作为 `NULL`返回。这和在`COPY`的`FORCE_NULL` 选项中监听该字段有相同的效果。

`file_fdw`目前不支持`COPY`的`OIDS`和 `FORCE_QUOTE`选项。

这些选项只能为外部表或它的字段声明，不是在`file_fdw`外部数据封装器的选项里， 也不是在使用该封装器的服务器或用户映射的选项里。

修改表级别的选项需要超级用户权限，因为安全原因：只有超级用户能够决定读哪个文件。 原则上非超级用户可以被允许改变其他选项，但是目前还不支持。

对于一个使用`file_fdw`的外部表，`EXPLAIN`显示要读取的文件名。 除非指定了`COSTS OFF`，否则也显示文件大小（字节计）。

例 F-1. 为PostgreSQL CSV日志创建一个外部表

`file_fdw`明显的用处之一就是使PostgreSQL活动日志可以作为一个表查询。 要做到这点，首先必须登录到一个CSV文件，这里我们称为`pglog.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' );

就这样，现在可以查询日志目录。当然，在生产中需要定义一些处理日志回旋的方法。

上一页 | 起始页 | 下一页
earthdistance | 上一级 | fuzzystrmatch