pg_ttl_index
基于TTL索引的自动数据过期清理
仓库
ibrahimkarimeddin/postgres-extensions-pg_ttl
https://github.com/ibrahimkarimeddin/postgres-extensions-pg_ttl
源码
postgres-extensions-pg_ttl-3.0.0.tar.gz
postgres-extensions-pg_ttl-3.0.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_ttl_index | 3.0.0 | FEAT | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2740 | pg_ttl_index | 否 | 是 | 是 | 是 | 否 | 是 | - |
| 相关扩展 | temporal_tables periods hll rum pg_partman pg_cron pg_task timescaledb |
|---|
pg 14 breaks
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 3.0.0 | 1817161514 | pg_ttl_index | - |
| RPM | PIGSTY | 3.0.0 | 1817161514 | pg_ttl_index_$v | - |
| DEB | PIGSTY | 3.0.0 | 1817161514 | postgresql-$v-ttl-index | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 3.0.0 el8.x86_64.pg18 : pg_ttl_index_18 pg_ttl_index_18-3.0.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY 3.0.0 el8.x86_64.pg17 : pg_ttl_index_17 pg_ttl_index_17-3.0.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY 3.0.0 el8.x86_64.pg16 : pg_ttl_index_16 pg_ttl_index_16-3.0.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY 3.0.0 el8.x86_64.pg15 : pg_ttl_index_15 pg_ttl_index_15-3.0.0-1PIGSTY.el8.x86_64.rpm
| PIGSTY MISS |
| el8.aarch64 | PIGSTY 3.0.0 el8.aarch64.pg18 : pg_ttl_index_18 pg_ttl_index_18-3.0.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY 3.0.0 el8.aarch64.pg17 : pg_ttl_index_17 pg_ttl_index_17-3.0.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY 3.0.0 el8.aarch64.pg16 : pg_ttl_index_16 pg_ttl_index_16-3.0.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY 3.0.0 el8.aarch64.pg15 : pg_ttl_index_15 pg_ttl_index_15-3.0.0-1PIGSTY.el8.aarch64.rpm
| PIGSTY MISS |
| el9.x86_64 | PIGSTY 3.0.0 el9.x86_64.pg18 : pg_ttl_index_18 pg_ttl_index_18-3.0.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY 3.0.0 el9.x86_64.pg17 : pg_ttl_index_17 pg_ttl_index_17-3.0.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY 3.0.0 el9.x86_64.pg16 : pg_ttl_index_16 pg_ttl_index_16-3.0.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY 3.0.0 el9.x86_64.pg15 : pg_ttl_index_15 pg_ttl_index_15-3.0.0-1PIGSTY.el9.x86_64.rpm
| PIGSTY MISS |
| el9.aarch64 | PIGSTY 3.0.0 el9.aarch64.pg18 : pg_ttl_index_18 pg_ttl_index_18-3.0.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY 3.0.0 el9.aarch64.pg17 : pg_ttl_index_17 pg_ttl_index_17-3.0.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY 3.0.0 el9.aarch64.pg16 : pg_ttl_index_16 pg_ttl_index_16-3.0.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY 3.0.0 el9.aarch64.pg15 : pg_ttl_index_15 pg_ttl_index_15-3.0.0-1PIGSTY.el9.aarch64.rpm
| PIGSTY MISS |
| el10.x86_64 | PIGSTY 3.0.0 el10.x86_64.pg18 : pg_ttl_index_18 pg_ttl_index_18-3.0.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY 3.0.0 el10.x86_64.pg17 : pg_ttl_index_17 pg_ttl_index_17-3.0.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY 3.0.0 el10.x86_64.pg16 : pg_ttl_index_16 pg_ttl_index_16-3.0.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY 3.0.0 el10.x86_64.pg15 : pg_ttl_index_15 pg_ttl_index_15-3.0.0-1PIGSTY.el10.x86_64.rpm
| PIGSTY MISS |
| el10.aarch64 | PIGSTY 3.0.0 el10.aarch64.pg18 : pg_ttl_index_18 pg_ttl_index_18-3.0.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY 3.0.0 el10.aarch64.pg17 : pg_ttl_index_17 pg_ttl_index_17-3.0.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY 3.0.0 el10.aarch64.pg16 : pg_ttl_index_16 pg_ttl_index_16-3.0.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY 3.0.0 el10.aarch64.pg15 : pg_ttl_index_15 pg_ttl_index_15-3.0.0-1PIGSTY.el10.aarch64.rpm
| PIGSTY MISS |
| d12.x86_64 | PIGSTY 3.0.0 d12.x86_64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY 3.0.0 d12.x86_64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY 3.0.0 d12.x86_64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY 3.0.0 d12.x86_64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~bookworm_amd64.deb
| PIGSTY MISS |
| d12.aarch64 | PIGSTY 3.0.0 d12.aarch64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY 3.0.0 d12.aarch64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY 3.0.0 d12.aarch64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY 3.0.0 d12.aarch64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~bookworm_arm64.deb
| PIGSTY MISS |
| d13.x86_64 | PIGSTY 3.0.0 d13.x86_64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~trixie_amd64.deb
| PIGSTY 3.0.0 d13.x86_64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~trixie_amd64.deb
| PIGSTY 3.0.0 d13.x86_64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~trixie_amd64.deb
| PIGSTY 3.0.0 d13.x86_64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~trixie_amd64.deb
| PIGSTY MISS |
| d13.aarch64 | PIGSTY 3.0.0 d13.aarch64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~trixie_arm64.deb
| PIGSTY 3.0.0 d13.aarch64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~trixie_arm64.deb
| PIGSTY 3.0.0 d13.aarch64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~trixie_arm64.deb
| PIGSTY 3.0.0 d13.aarch64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~trixie_arm64.deb
| PIGSTY MISS |
| u22.x86_64 | PIGSTY 3.0.0 u22.x86_64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~jammy_amd64.deb
| PIGSTY 3.0.0 u22.x86_64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~jammy_amd64.deb
| PIGSTY 3.0.0 u22.x86_64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~jammy_amd64.deb
| PIGSTY 3.0.0 u22.x86_64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~jammy_amd64.deb
| PIGSTY MISS |
| u22.aarch64 | PIGSTY 3.0.0 u22.aarch64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~jammy_arm64.deb
| PIGSTY 3.0.0 u22.aarch64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~jammy_arm64.deb
| PIGSTY 3.0.0 u22.aarch64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~jammy_arm64.deb
| PIGSTY 3.0.0 u22.aarch64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~jammy_arm64.deb
| PIGSTY MISS |
| u24.x86_64 | PIGSTY 3.0.0 u24.x86_64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~noble_amd64.deb
| PIGSTY 3.0.0 u24.x86_64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~noble_amd64.deb
| PIGSTY 3.0.0 u24.x86_64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~noble_amd64.deb
| PIGSTY 3.0.0 u24.x86_64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~noble_amd64.deb
| PIGSTY MISS |
| u24.aarch64 | PIGSTY 3.0.0 u24.aarch64.pg18 : postgresql-18-ttl-index postgresql-18-ttl-index_3.0.0-1PIGSTY~noble_arm64.deb
| PIGSTY 3.0.0 u24.aarch64.pg17 : postgresql-17-ttl-index postgresql-17-ttl-index_3.0.0-1PIGSTY~noble_arm64.deb
| PIGSTY 3.0.0 u24.aarch64.pg16 : postgresql-16-ttl-index postgresql-16-ttl-index_3.0.0-1PIGSTY~noble_arm64.deb
| PIGSTY 3.0.0 u24.aarch64.pg15 : postgresql-15-ttl-index postgresql-15-ttl-index_3.0.0-1PIGSTY~noble_arm64.deb
| PIGSTY MISS |
构建
您可以使用 pig build 命令构建 pg_ttl_index 扩展的 RPM / DEB 包:
pig build pkg pg_ttl_index # 构建 RPM / DEB 包
安装
您可以直接安装 pg_ttl_index 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_ttl_index; # 当前活跃 PG 版本安装
pig ext install -y pg_ttl_index -v 18 # PG 18
pig ext install -y pg_ttl_index -v 17 # PG 17
pig ext install -y pg_ttl_index -v 16 # PG 16
pig ext install -y pg_ttl_index -v 15 # PG 15
dnf install -y pg_ttl_index_18 # PG 18
dnf install -y pg_ttl_index_17 # PG 17
dnf install -y pg_ttl_index_16 # PG 16
dnf install -y pg_ttl_index_15 # PG 15
apt install -y postgresql-18-ttl-index # PG 18
apt install -y postgresql-17-ttl-index # PG 17
apt install -y postgresql-16-ttl-index # PG 16
apt install -y postgresql-15-ttl-index # PG 15
预加载配置:
shared_preload_libraries = 'pg_ttl_index';
创建扩展:
CREATE EXTENSION pg_ttl_index;
用法
pg_ttl_index 通过将 TTL(生存时间)与时间戳列关联来实现自动数据过期。后台工作进程会定期删除时间戳超过配置过期间隔的行。
快速开始
-- 启动后台工作进程
SELECT ttl_start_worker();
-- 创建带时间戳列的表
CREATE TABLE user_sessions (
id SERIAL PRIMARY KEY,
user_id INTEGER,
session_data JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 1 小时(3600 秒)后过期
SELECT ttl_create_index('user_sessions', 'created_at', 3600);
函数
| 函数 | 描述 |
|---|---|
ttl_start_worker() | 启动自动清理的后台工作进程 |
ttl_worker_status() | 检查工作进程是否正在运行 |
ttl_runner() | 手动触发清理 |
ttl_create_index(table, column, expire_seconds [, batch_size]) | 配置 TTL 过期策略 |
ttl_drop_index(table, column) | 移除 TTL 配置 |
ttl_summary() | 列出所有 TTL 索引及统计信息 |
示例
24 小时过期的会话管理:
SELECT ttl_create_index('sessions', 'created_at', 86400, 5000);
7 天日志保留:
SELECT ttl_create_index('app_logs', 'logged_at', 604800);
自定义过期列的缓存条目(0 表示该列本身存储绝对过期时间):
SELECT ttl_create_index('cache_entries', 'expires_at', 0);
监控
SELECT * FROM ttl_summary();
暂停特定表的清理:
UPDATE ttl_index_table SET active = false WHERE table_name = 'user_sessions';
配置
| 参数 | 描述 | 默认值 |
|---|---|---|
pg_ttl_index.naptime | 清理间隔(秒) | 60 |
pg_ttl_index.enabled | 全局启用/禁用工作进程 | on |
ALTER SYSTEM SET pg_ttl_index.naptime = 30;
SELECT pg_reload_conf();