pg_auditor
审计数据变更并提供闪回能力
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_auditor | 0.2 | SEC | BSD 3-Clause | SQL |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 7130 | pg_auditor | 否 | 否 | 否 | 是 | 否 | 否 | auditor |
| 相关扩展 | hstore pg_drop_events table_log pgaudit temporal_tables emaj pg_savior pg_upless pgauditlogtofile |
|---|
pg15 rpm pkg name is pgaudit17_$v*
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.2 | 1817161514 | pg_auditor | hstore |
| RPM | PIGSTY | 0.2 | 1817161514 | pg_auditor_$v | - |
| DEB | PIGSTY | 0.2 | 1817161514 | postgresql-$v-pg-auditor | - |
构建
您可以使用 pig build 命令构建 pg_auditor 扩展的 RPM / DEB 包:
pig build pkg pg_auditor # 构建 RPM / DEB 包
安装
您可以直接安装 pg_auditor 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_auditor; # 当前活跃 PG 版本安装
pig ext install -y pg_auditor -v 18 # PG 18
pig ext install -y pg_auditor -v 17 # PG 17
pig ext install -y pg_auditor -v 16 # PG 16
pig ext install -y pg_auditor -v 15 # PG 15
pig ext install -y pg_auditor -v 14 # PG 14
dnf install -y pg_auditor_18 # PG 18
dnf install -y pg_auditor_17 # PG 17
dnf install -y pg_auditor_16 # PG 16
dnf install -y pg_auditor_15 # PG 15
dnf install -y pg_auditor_14 # PG 14
apt install -y postgresql-18-pg-auditor # PG 18
apt install -y postgresql-17-pg-auditor # PG 17
apt install -y postgresql-16-pg-auditor # PG 16
apt install -y postgresql-15-pg-auditor # PG 15
apt install -y postgresql-14-pg-auditor # PG 14
创建扩展:
CREATE EXTENSION pg_auditor CASCADE; -- 依赖: hstore
用法
pg_auditor 记录指定表上的每一次数据修改(INSERT、UPDATE、DELETE),并允许部分或完整的事务闪回。
CREATE EXTENSION pg_auditor CASCADE; -- 同时安装 hstore
审计控制
-- 开始审计一个表(默认审计所有 DML)
SELECT auditor.attach('fruit');
-- 仅审计特定操作
SELECT auditor.attach('fruit', ARRAY['INSERT', 'UPDATE']);
-- 仅审计特定列
SELECT auditor.attach('fruit', ARRAY['INSERT', 'UPDATE', 'DELETE'], ARRAY['name', 'weight']);
-- 停止审计
SELECT auditor.detach('fruit');
-- 管理单个语句/列
SELECT auditor.attach_statement('fruit', 'DELETE');
SELECT auditor.detach_statement('fruit', 'DELETE');
SELECT auditor.attach_column('fruit', 'weight');
SELECT auditor.detach_column('fruit', 'weight');
-- 防止 TRUNCATE
SELECT auditor.forbid_truncate('fruit');
查看审计日志
SELECT transaction_id, operation, old_rec, new_rec FROM auditor.log;
闪回函数
-- 撤销当前会话中最后 N 个事务
SELECT auditor.undo(); -- 撤销最后1个
SELECT auditor.undo(3); -- 撤销最后3个
SELECT auditor.undo(1, true); -- 覆盖其他会话
-- 取消特定事务
SELECT auditor.cancel(5557);
-- 将数据恢复到特定事务或时间戳
SELECT auditor.flashback(5556);
SELECT auditor.flashback('2021-02-08 14:40:00'::timestamp);
列演化追踪
SELECT * FROM auditor.evolution('fruit'::regclass, 'weight', 'orange'::text);
-- 显示给定主键的某列值的完整历史