pgfaceting
使用倒排索引的高速切面查询
仓库
cybertec-postgresql/pgfaceting
https://github.com/cybertec-postgresql/pgfaceting
源码
pgfaceting-0.2.0.tar.gz
pgfaceting-0.2.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgfaceting | 0.2.0 | TYPE | BSD 3-Clause | SQL |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 3580 | pgfaceting | 否 | 否 | 否 | 是 | 否 | 否 | faceting |
| 相关扩展 | roaringbitmap pg_trgm rum prefix semver unit pgpdf pglite_fusion md5hash |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 0.2.0 | 1817161514 | pgfaceting | roaringbitmap |
| RPM | PIGSTY | 0.2.0 | 1817161514 | pgfaceting_$v | - |
| DEB | PGDG | 0.2.0 | 1817161514 | postgresql-$v-pgfaceting | - |
构建
您可以使用 pig build 命令构建 pgfaceting 扩展的 RPM 包:
pig build pkg pgfaceting # 构建 RPM 包
安装
您可以直接安装 pgfaceting 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pgfaceting; # 当前活跃 PG 版本安装
pig ext install -y pgfaceting -v 18 # PG 18
pig ext install -y pgfaceting -v 17 # PG 17
pig ext install -y pgfaceting -v 16 # PG 16
pig ext install -y pgfaceting -v 15 # PG 15
pig ext install -y pgfaceting -v 14 # PG 14
dnf install -y pgfaceting_18 # PG 18
dnf install -y pgfaceting_17 # PG 17
dnf install -y pgfaceting_16 # PG 16
dnf install -y pgfaceting_15 # PG 15
dnf install -y pgfaceting_14 # PG 14
apt install -y postgresql-18-pgfaceting # PG 18
apt install -y postgresql-17-pgfaceting # PG 17
apt install -y postgresql-16-pgfaceting # PG 16
apt install -y postgresql-15-pgfaceting # PG 15
apt install -y postgresql-14-pgfaceting # PG 14
创建扩展:
CREATE EXTENSION pgfaceting CASCADE; -- 依赖: roaringbitmap
用法
pgfaceting 扩展通过使用 Roaring 位图构建的倒排索引实现快速分面计数。依赖 pg_roaringbitmap 扩展。
CREATE EXTENSION pgfaceting;
分面类型
plain_facet(column):直接使用列值作为分面datetrunc_facet(column, precision):按日期截断(例如按月/按年分组)bucket_facet(column, buckets):将连续变量划分到预定义的区间
核心函数
-- 为表创建分面基础设施
SELECT pgfaceting.add_faceting_to_table(
'products',
'id',
ARRAY[
plain_facet('color'),
plain_facet('size'),
bucket_facet('price', ARRAY[0, 10, 50, 100, 500])
]
);
-- 运行维护以合并增量变更
SELECT pgfaceting.run_maintenance();
-- 合并指定表的增量数据
SELECT pgfaceting.merge_deltas('products');
-- 获取前 N 个分面值
SELECT pgfaceting.top_values('products', 10);
-- 按分面过滤条件统计结果数量
SELECT pgfaceting.count_results('products', filters);
架构
该扩展为每个被索引的表维护两张辅助表:一张存储 Roaring 位图的主分面表,将分面值映射到行 ID;另一张增量表用于在维护运行之间记录增量变更。
目前仅支持 32 位整数 ID 列。