一、file_fdw简介
file_fdw模块提供外部数据包装器file_fdw, 它能被用来访问服务器的文件系统中的数据文件,或者在服务器上执行程序并读取它们的输出。 数据文件或程序输出必须是能够被COPY FROM读取的格式,当前只能读取数据文件。
二、file_fdw安装和使用
1、安装file_fdw
同postgres_fdw扩展。file_fdw在pg安装包中已内置,默认没有安装。使用以下语句安装file_fdw扩展
create extension file_fdw ;
2、创建外部服务器
create server server_file_fdw foreign data wrapper file_fdw;
3、创建外部表
CREATE foreign TABLE "public"."fdw_user" (
"id" varchar(36) COLLATE "pg_catalog"."default" NOT NULL,
"user_name" varchar(255) COLLATE "pg_catalog"."default",
"password" varchar(32) COLLATE "pg_catalog"."default",
"age" int4 DEFAULT 0,
"sex" bool,
"moblie" varchar(255) COLLATE "pg_catalog"."default",
"emali" varchar(255) COLLATE "pg_catalog"."default",
"create_time" date,
"note" varchar(255) COLLATE "pg_catalog"."default",
"real_name" varchar(255) COLLATE "pg_catalog"."default"
) server server_file_fdw options (filename '/home/user/temp/tb_user.csv');
选项如下:
注:使用file_fdw创建的外部表只能查看,不允许修改操作。
三、 创建外部表读取PostgreSQL日志
1、安装file_fdw扩展
CREATE EXTENSION file_fdw;
2、创建外部服务器
CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;
3、创建外部表
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' );
现在你能够直接查询你的日志了。当然,在生产中你会需要定义一些方法来处理日志轮转。
本文借鉴pg12的官方文档