pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
file_fdw 模块提供外部数据包装器 file_fdw,可用于访问服务器文件系统中的数据文件。数据文件必须采用 COPY FROM 可读取的格式;详见 COPY。
使用该包装器创建的外部表可以具有以下选项:
filename指定要读取的文件。必需。必须是绝对路径名。
format指定文件的格式,与COPY的FORMAT选项相同。
header指定文件是否包含标题行,与COPY的HEADER选项相同。
delimiter指定文件的定界符字符,与COPY的DELIMITER选项相同。
quote指定文件的引用字符,与COPY的QUOTE选项相同。
escape指定文件的转义字符,与COPY的ESCAPE选项相同。
null指定文件的空值串,与COPY的NULL选项相同。
encoding指定文件的编码,与COPY的ENCODING选项相同。
使用此包装器创建的外部表的列可以具有下列选项:
force_not_null这是一个布尔选项。如果为真,它指定该列的值不应与空值串(即文件级的 null选项)匹配。其效果与在COPY的 FORCE_NOT_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' );
到这里就完成了 — 现在可以直接查询日志了。当然,在生产环境中, 还需要定义某种方法来处理日志轮转。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。