data_historization
用SQL将数据变更历史保存到分区表中
仓库
rodo/postgresql-data-historization
https://github.com/rodo/postgresql-data-historization
源码
postgresql-data-historization-1.1.0.tar.gz
postgresql-data-historization-1.1.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
data_historization | 1.1.0 | UTIL | PostgreSQL | SQL |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4320 | data_historization | 否 | 否 | 否 | 是 | 是 | 否 | - |
| 相关扩展 | plpgsql ddl_historization temporal_tables table_version gzip bzip zstd http pg_net |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.1.0 | 1817161514 | data_historization | plpgsql |
| RPM | PIGSTY | 1.1.0 | 1817161514 | data_historization_$v | - |
| DEB | PIGSTY | 1.1.0 | 1817161514 | postgresql-$v-data-historization | - |
构建
您可以使用 pig build 命令构建 data_historization 扩展的 RPM / DEB 包:
pig build pkg data_historization # 构建 RPM / DEB 包
安装
您可以直接安装 data_historization 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install data_historization; # 当前活跃 PG 版本安装
pig ext install -y data_historization -v 18 # PG 18
pig ext install -y data_historization -v 17 # PG 17
pig ext install -y data_historization -v 16 # PG 16
pig ext install -y data_historization -v 15 # PG 15
pig ext install -y data_historization -v 14 # PG 14
dnf install -y data_historization_18 # PG 18
dnf install -y data_historization_17 # PG 17
dnf install -y data_historization_16 # PG 16
dnf install -y data_historization_15 # PG 15
dnf install -y data_historization_14 # PG 14
apt install -y postgresql-18-data-historization # PG 18
apt install -y postgresql-17-data-historization # PG 17
apt install -y postgresql-16-data-historization # PG 16
apt install -y postgresql-15-data-historization # PG 15
apt install -y postgresql-14-data-historization # PG 14
创建扩展:
CREATE EXTENSION data_historization CASCADE; -- 依赖: plpgsql
用法
用于将数据变更历史化到分区表中的 PL/pgSQL 脚本。
初始化历史化
为表设置所需的对象(尚不采集数据):
SELECT historize_table_init('public', 'my_table');
启动历史化
安装触发器,开始将变更收集到 _log 表中:
SELECT historize_table_start('public', 'my_table');
停止历史化
移除触发器,停止收集变更:
SELECT historize_table_stop('public', 'my_table');
重置历史化
移除 cron 条目和在源表上创建的列:
SELECT historize_table_reset('public', 'my_table');
清理历史化
完全移除日志表:
SELECT historize_table_clean('public', 'my_table');
分区管理
手动创建和删除分区:
SELECT historize_create_partition('public', 'my_table_log', 0);
SELECT historize_drop_partition('public', 'my_table_log', 0);
使用 pg_cron 自动化:
SELECT cron.schedule_in_database(
'create-partitions', '00 08 * * *',
$$SELECT historize_create_partition('my_table', generate_series(1, 4))$$,
'my_database'
);