PostgreSQL好用的file_fdw
1、简介
-
file_fdw 是postgresql 一个插件, 插件的加载及使用及其类似linux 嵌入式驱动的加载及使用。都是通过加载动态库文件来使用。
-
file_fdw 简单理解为创建了一个类似普通表表结构的外表,而该外表执行过程依赖系统函数file_fdw_handler, file_fdw_handler 函数内部使用了针对file_fdw 的外表执行计划生成
-
查找的几个函数(执行计划只有sequence scan),通过外表读取源文件数据(本机的绝对路径下的文件), 该读取文件方式用了postgresql 内部一直用的COPY协议。
2、支持选项
filename
指定要被读取的文件。必须是一个绝对路径名。 必须指定filename
或program
, 但不能同时指定两个。
program
指定要执行的命令。该命令的标准输出将被读取, 就像使用COPY FROM PROGRAM
一样。必须指定program
或filename
,但不能同时指定两个。
format
指定数据的格式,和COPY
的FORMAT
选项相同。
header
指定数据是否具有一个头部行,和COPY
的HEADER
选项相同。
delimiter
指定数据的定界符字符,和COPY
的DELIMITER
选项相同。
quote
指定数据的引用字符,和COPY
的QUOTE
选项相同。
escape
指定数据的转义字符,和COPY
的ESCAPE
选项相同。
null
指定数据的空字符串,和COPY
的NULL
选项相同。
encoding
指定数据的编码,和COPY
的ENCODING
选项相同。
3、实例
一种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/data/log/pglog.csv', format 'csv' );