roaringbitmap

支持RoaringBitmap数据类型

概览

扩展包名版本分类许可证语言
pg_roaringbitmap1.1.0TYPEApache-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
3570roaringbitmap-
相关扩展rum prefix semver unit pgpdf pglite_fusion md5hash asn1oid
下游依赖pgfaceting

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG1.1.01817161514pg_roaringbitmap-
RPMPGDG1.1.01817161514pg_roaringbitmap_$v-
DEBPGDG1.1.01817161514postgresql-$v-roaringbitmap-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
d12.aarch64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
d13.x86_64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
d13.aarch64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
u22.x86_64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
u22.aarch64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
u24.x86_64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
u24.aarch64
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0
PGDG 1.1.0

构建

您可以使用 pig build 命令构建 pg_roaringbitmap 扩展的 RPM 包:

pig build pkg pg_roaringbitmap         # 构建 RPM 包

安装

您可以直接安装 pg_roaringbitmap 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:

pig repo add pgdg -u          # 添加 PGDG 仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_roaringbitmap;          # 当前活跃 PG 版本安装
pig ext install -y pg_roaringbitmap -v 18  # PG 18
pig ext install -y pg_roaringbitmap -v 17  # PG 17
pig ext install -y pg_roaringbitmap -v 16  # PG 16
pig ext install -y pg_roaringbitmap -v 15  # PG 15
pig ext install -y pg_roaringbitmap -v 14  # PG 14
dnf install -y pg_roaringbitmap_18       # PG 18
dnf install -y pg_roaringbitmap_17       # PG 17
dnf install -y pg_roaringbitmap_16       # PG 16
dnf install -y pg_roaringbitmap_15       # PG 15
dnf install -y pg_roaringbitmap_14       # PG 14
apt install -y postgresql-18-roaringbitmap   # PG 18
apt install -y postgresql-17-roaringbitmap   # PG 17
apt install -y postgresql-16-roaringbitmap   # PG 16
apt install -y postgresql-15-roaringbitmap   # PG 15
apt install -y postgresql-14-roaringbitmap   # PG 14

创建扩展

CREATE EXTENSION roaringbitmap;

用法

roaringbitmap: PostgreSQL 的压缩位图数据类型

roaringbitmap 扩展提供了压缩位图数据类型,用于对整数集合进行高效的集合运算。

CREATE EXTENSION roaringbitmap;
SET roaringbitmap.output_format = 'array';

SELECT rb_build('{1,2,3,4,5}'::int[]);  -- {1,2,3,4,5}

数据类型

  • roaringbitmap:32 位位图,范围 [0, 4294967296)
  • roaringbitmap64:64 位位图,范围 [0, 18446744073709551615)

输出格式通过以下方式控制:SET roaringbitmap.output_format = 'array''bytea'

运算符

运算符说明
|按位或(并集)
&按位与(交集)
#按位异或
-差集(与非)
|(与 int)添加元素
-(与 int)移除元素
@>包含
<@被包含于
&&重叠
=, <>相等/不等

核心函数

-- 构建
SELECT rb_build(ARRAY[1,2,3,4,5]);

-- 分析
SELECT rb_cardinality(rb_build('{1,2,3}'::int[]));   -- 3
SELECT rb_to_array(rb_build('{1,2,3}'::int[]));      -- {1,2,3}
SELECT rb_iterate(rb_build('{1,2,3}'::int[]));        -- 返回集合

-- 集合运算基数
SELECT rb_and_cardinality(a, b);
SELECT rb_or_cardinality(a, b);
SELECT rb_xor_cardinality(a, b);
SELECT rb_andnot_cardinality(a, b);

-- 范围操作
SELECT rb_range(bitmap, 2, 5);   -- 提取范围 [2, 5)
SELECT rb_fill(bitmap, 0, 10);   -- 添加范围 [0, 10)
SELECT rb_clear(bitmap, 3, 7);   -- 移除范围 [3, 7)
SELECT rb_flip(bitmap, 0, 10);   -- 翻转范围 [0, 10)

-- 元素访问
SELECT rb_min(bitmap);            -- 最小元素
SELECT rb_max(bitmap);            -- 最大元素
SELECT rb_rank(bitmap, 5);        -- 统计 <= 5 的元素数量
SELECT rb_index(bitmap, 3);       -- 元素的从零开始的位置

-- 工具函数
SELECT rb_is_empty(bitmap);
SELECT rb_jaccard_dist(a, b);     -- Jaccard 相似度

聚合函数

SELECT rb_build_agg(id) FROM table;       -- 从行构建位图
SELECT rb_or_agg(bitmap) FROM table;      -- 合并所有位图(并集)
SELECT rb_and_agg(bitmap) FROM table;     -- 合并所有位图(交集)
SELECT rb_xor_agg(bitmap) FROM table;     -- 合并所有位图(异或)

64 位版本使用 rb64_ 前缀。


最后修改 2026-03-14: update extension metadata (953cbd0)