emaj
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1050 | emaj | 否 | 是 | 否 | 是 | 否 | 否 | emaj |
| 相关扩展 | btree_gist dblink table_version pgmemento data_historization table_log ddl_historization periods temporal_tables |
|---|
Requires max_prepared_transactions
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 5.0.0 | 1817161514 | emaj | btree_gist, dblink |
| RPM | PIGSTY | 5.0.0 | 1817161514 | e-maj_$v | - |
| DEB | PIGSTY | 5.0.0 | 1817161514 | postgresql-$v-emaj | - |
构建
您可以使用 pig build 命令构建 emaj 扩展的 RPM / DEB 包:
安装
您可以直接安装 emaj 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:
规范扩展名是 emaj;E-Maj 为一个协调表组记录表与序列变更,并可把整个表组回滚到命名标记。它适用于可重复测试、批处理保存点、变更检查与定向恢复,但 E-Maj 回滚不能替代 PostgreSQL 事务回滚或备份。
核心流程
可回滚表组可以包含多个 schema 中的表与序列,但每张表必须有主键。仅审计表组可记录不可回滚对象的变更。启动和停止表组会锁定其应用表,因此要结合并发流量安排这些操作。
重要对象
emaj_create_group与各类分配函数用于定义表组。emaj_start_group、emaj_set_mark_group与emaj_stop_group管理日志会话和标记。emaj_rollback_group执行不记日志的回滚;emaj_logged_rollback_group会记录补偿变更。- 多组变体可在同一时间点操作由组名组成的数组。
- 统计与变更导出函数可检查两个标记之间的变更,或生成用于重放的 SQL。
emaj_set_param无需直接写内部参数表即可修改或重置 E-Maj 参数。emaj_drop_extension()是受支持的完整移除辅助函数。
5.0 版本升级
如果 E-Maj 以扩展方式安装且版本不低于 2.3.1,先安装新软件包文件,再执行:
文档给出的扩展升级会保留日志,而且表组可以继续处于 LOGGING 状态。切换前应检查以下 5.0 兼容性变化:
- 支持 PostgreSQL 14 到 19;不再支持 PostgreSQL 12 与 13。
- 对
emaj_param的直接INSERT、UPDATE或DELETE必须改为调用emaj_set_param。 - 幂等启动和停止调用增加了允许已启动或允许已空闲参数;使用命名参数的调用方必须检查参数重命名。
- PHP 命令行客户端与
emaj_uninstall.sql已移除。
通过独立 SQL 脚本安装的环境没有相同的就地扩展升级路径;应遵循官方删除并重装流程。
要求与注意事项
标准 CREATE EXTENSION 路径需要超级用户权限,并通过 CASCADE 安装 dblink 与 btree_gist。E-Maj 也支持受限的非超级用户脚本安装,其能力限制取决于安装角色。
只有并行回滚客户端需要 max_prepared_transactions,其值必须不小于计划使用的会话数;修改后需要重启。大型表组也可能需要更高的 max_locks_per_transaction。应把 E-Maj 日志表视为运维数据:明确规划保留策略、监控增长,并继续使用普通备份进行灾难恢复。