简介
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 ) ;
参考
https://www.codenong.com/cs106553057/