log_fdw
访问PostgreSQL日志文件的FDW
仓库
aws/postgresql-logfdw
https://github.com/aws/postgresql-logfdw
源码
log_fdw-1.4.tar.gz
log_fdw-1.4.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
log_fdw | 1.4 | FDW | Apache-2.0 | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8810 | log_fdw | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | pg_sqlog pgaudit file_fdw auto_explain pgauditlogtofile logerrors wrappers multicorn |
|---|
PG18 fixed by vonng
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.4 | 1817161514 | log_fdw | - |
| RPM | PIGSTY | 1.4 | 1817161514 | log_fdw_$v | - |
| DEB | PIGSTY | 1.4 | 1817161514 | postgresql-$v-log-fdw | - |
构建
您可以使用 pig build 命令构建 log_fdw 扩展的 DEB 包:
pig build pkg log_fdw # 构建 DEB 包
安装
您可以直接安装 log_fdw 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install log_fdw; # 当前活跃 PG 版本安装
pig ext install -y log_fdw -v 18 # PG 18
pig ext install -y log_fdw -v 17 # PG 17
pig ext install -y log_fdw -v 16 # PG 16
pig ext install -y log_fdw -v 15 # PG 15
pig ext install -y log_fdw -v 14 # PG 14
dnf install -y log_fdw_18 # PG 18
dnf install -y log_fdw_17 # PG 17
dnf install -y log_fdw_16 # PG 16
dnf install -y log_fdw_15 # PG 15
dnf install -y log_fdw_14 # PG 14
apt install -y postgresql-18-log-fdw # PG 18
apt install -y postgresql-17-log-fdw # PG 17
apt install -y postgresql-16-log-fdw # PG 16
apt install -y postgresql-15-log-fdw # PG 15
apt install -y postgresql-14-log-fdw # PG 14
创建扩展:
CREATE EXTENSION log_fdw;
用法
log_fdw 是一个用于通过 SQL 读取 PostgreSQL 日志文件的外部数据包装器。它提供辅助函数,用于列出服务器日志目录中的文件,以及为单个日志文件创建外部表。
核心函数
上游 README 定义了两个 SQL 入口:
create_foreign_table_for_log_file(table_name text, server_name text, log_file_name text)
list_postgres_log_files()
list_postgres_log_files() 是对 PostgreSQL 核心函数 pg_ls_logdir() 的兼容包装。
基本流程
先创建扩展和外部服务器:
CREATE EXTENSION log_fdw;
CREATE SERVER log_fdw_server FOREIGN DATA WRAPPER log_fdw;
列出 PostgreSQL 日志目录中的文件:
SELECT * FROM list_postgres_log_files() ORDER BY 1 DESC LIMIT 10;
为 CSV 日志或普通 .log 文件创建外部表:
SELECT * FROM create_foreign_table_for_log_file(
'postgresql_2022_11_28_csv',
'log_fdw_server',
'postgresql-2022-11-28.csv'
);
SELECT * FROM create_foreign_table_for_log_file(
'postgresql_2022_11_28_log',
'log_fdw_server',
'postgresql-2022-11-28.log'
);
查询
由普通日志文件创建的外部表通常只暴露单个日志行样式的列;CSV 日志文件则会暴露结构化列,例如 log_time、error_severity、message 以及会话元数据。
典型用法如下:
SELECT * FROM postgresql_2022_11_28_log LIMIT 2;
SELECT log_time, error_severity, message
FROM postgresql_2022_11_28_csv
WHERE error_severity = 'ERROR'
ORDER BY log_time DESC
LIMIT 20;
权限
只有超级用户可以创建该扩展。上游还说明,超级用户可以通过最小权限授予把访问能力委托给非超级用户,例如:
CREATE ROLE foo;
GRANT pg_monitor TO foo;
GRANT CREATE ON SCHEMA bar TO foo;
GRANT USAGE ON FOREIGN SERVER log_fdw_server TO foo;
当使用 list_postgres_log_files() 时,需要 pg_monitor,因为底层 pg_ls_logdir() 函数需要这个权限。
构建说明
该项目可以使用 PGXS 独立构建:
export USE_PGXS=1
make
make install
也可以把源码复制到 PostgreSQL 的 contrib 目录中,作为更大发行版的一部分进行构建。