简介

PostgreSQL的file_fdw模块允许我们直接从数据库中来访问服务器的文件系统中的文件,不过这些文件必须是能够被COPY FROM读取的格式。

通过file_fdw创建外部表时可指定的参数有:

  • 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选项

实例

create extension file_fdw;

CREATE SERVER pglog FOREIGN DATA WRAPPER file_fdw;

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 ( program 'find $PGHOME/pg_log -type f -name "*.csv" -exec cat {} \;', format 'csv');

-- 分析每个 IP 每分钟连接数量
select split_part(connection_from,':',1) ,substring(log_time::text ,1,16 ), count(*) from pglog group by split_part(connection_from,':',1) , substring(log_time::text ,1,16 ) ;

PG file_fdw 分析 pg_log_数据库

参考

https://www.codenong.com/cs106553057/