pgelog
通过伪自治事务实现扩展日志记录
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgelog | 1.0.2 | ADMIN | PostgreSQL | SQL |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 5870 | pgelog | 否 | 否 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | dblink pg_variables table_log pgaudit logerrors dblink |
|---|
Requires the dblink extension at runtime in addition to pg_variables.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.0.2 | 1817161514 | pgelog | dblink, pg_variables |
| RPM | PIGSTY | 1.0.2 | 1817161514 | pgelog_$v | postgresql$v-contrib, pg_variables_$v |
| DEB | PIGSTY | 1.0.2 | 1817161514 | postgresql-$v-pgelog | postgresql-$v-pg-variables |
构建
您可以使用 pig build 命令构建 pgelog 扩展的 RPM / DEB 包:
pig build pkg pgelog # 构建 RPM / DEB 包
安装
您可以直接安装 pgelog 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pgelog; # 当前活跃 PG 版本安装
pig ext install -y pgelog -v 18 # PG 18
pig ext install -y pgelog -v 17 # PG 17
pig ext install -y pgelog -v 16 # PG 16
pig ext install -y pgelog -v 15 # PG 15
pig ext install -y pgelog -v 14 # PG 14
dnf install -y pgelog_18 # PG 18
dnf install -y pgelog_17 # PG 17
dnf install -y pgelog_16 # PG 16
dnf install -y pgelog_15 # PG 15
dnf install -y pgelog_14 # PG 14
apt install -y postgresql-18-pgelog # PG 18
apt install -y postgresql-17-pgelog # PG 17
apt install -y postgresql-16-pgelog # PG 16
apt install -y postgresql-15-pgelog # PG 15
apt install -y postgresql-14-pgelog # PG 14
创建扩展:
CREATE EXTENSION pgelog CASCADE; -- 依赖: dblink, pg_variables
用法
语法:
CREATE EXTENSION IF NOT EXISTS dblink; CREATE EXTENSION IF NOT EXISTS pg_variables; CREATE EXTENSION pgelog; SELECT pgelog_to_log('SQL', 'standalone', 'Test of logging by pgelog', '1');来源:README
pgelog 通过 dblink 实现伪自治事务,把日志写入 PostgreSQL 表中。其核心目标是即使调用方的主事务回滚,日志记录也能保留下来。
前置条件
README 要求:
- PostgreSQL 11 或更高版本
dblinkpg_variables- 本地免密码的
dblink访问,通常通过pg_hba.conf中的peer本地规则实现
它还提醒,每个会话可能会为 dblink 额外打开 1 条连接,因此需要合理设置 max_connections。
对象
扩展会创建:
pgelog_params,用于配置pgelog_logs,作为基础日志表pgelog_vw_logs,作为带时间信息的日志视图
日志表/视图会存储时间戳、日志类型、源函数、阶段、消息文本、事务 ID、SQLSTATE、SQLERRM 和连接名等字段。
基本记录
写入一条日志:
SELECT pgelog_to_log('SQL', 'standalone', 'Test of logging by pgelog', '1');
读取最新日志:
SELECT log_stamp, log_info
FROM pgelog_logs
ORDER BY log_stamp DESC
LIMIT 1;
PL/pgSQL 异常日志
README 给出了一个更完整的 PL/pgSQL 示例:捕获异常、收集诊断信息、通过 pgelog_to_log(...) 写入 FAIL 日志,然后重新抛出异常。这是捕获可回滚失败日志的主要模式。
配置
配置参数通过以下函数管理:
SELECT pgelog_get_param('pgelog_ttl_minutes');
SELECT pgelog_set_param('pgelog_ttl_minutes', '2880');
README 通过 pgelog_params 表和辅助函数来说明 pgelog_ttl_minutes 等参数。