Skip to content
roaringbitmap

roaringbitmap

pg_roaringbitmap : support for Roaring Bitmaps

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
3630
roaringbitmap
pg_roaringbitmap
1.2.0
TYPE
Apache-2.0
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d-r
No
Yes
No
Yes
yes
no
Relationships
Need By
pgfaceting
See Also
rum
prefix
semver
unit
pgpdf
pglite_fusion
md5hash
asn1oid

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
1.2.0
18
17
16
15
14
pg_roaringbitmap-
RPM
PGDG
1.2.0
18
17
16
15
14
pg_roaringbitmap_$v-
DEB
PGDG
1.2.0
18
17
16
15
14
postgresql-$v-roaringbitmap-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
el8.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
el9.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
el9.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
el10.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
el10.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
d12.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
d12.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
d13.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
d13.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
u22.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
u22.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
u24.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
u24.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
u26.x86_64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
u26.aarch64
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PIGSTY 1.2.0
PackageVersionOSORGSIZEFile URL
pg_roaringbitmap_181.2.0el8.x86_64pigsty183.6 KiBpg_roaringbitmap_18-1.2.0-2PIGSTY.el8.x86_64.rpm
pg_roaringbitmap_181.2.0el8.x86_64pgdg172.2 KiBpg_roaringbitmap_18-1.2.0-1PGDG.rhel8.10.x86_64.rpm
pg_roaringbitmap_181.1.0el8.x86_64pgdg171.3 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel8.x86_64.rpm
pg_roaringbitmap_181.0.0el8.x86_64pgdg170.9 KiBpg_roaringbitmap_18-1.0.0-1PGDG.rhel8.x86_64.rpm
pg_roaringbitmap_180.5.5el8.x86_64pgdg159.1 KiBpg_roaringbitmap_18-0.5.5-1PGDG.rhel8.x86_64.rpm
pg_roaringbitmap_181.2.0el8.aarch64pigsty153.9 KiBpg_roaringbitmap_18-1.2.0-2PIGSTY.el8.aarch64.rpm
pg_roaringbitmap_181.2.0el8.aarch64pgdg145.3 KiBpg_roaringbitmap_18-1.2.0-1PGDG.rhel8.10.aarch64.rpm
pg_roaringbitmap_181.1.0el8.aarch64pgdg144.5 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel8.aarch64.rpm
pg_roaringbitmap_181.0.0el8.aarch64pgdg144.2 KiBpg_roaringbitmap_18-1.0.0-1PGDG.rhel8.aarch64.rpm
pg_roaringbitmap_180.5.5el8.aarch64pgdg133.7 KiBpg_roaringbitmap_18-0.5.5-1PGDG.rhel8.aarch64.rpm
pg_roaringbitmap_181.2.0el9.x86_64pigsty116.2 KiBpg_roaringbitmap_18-1.2.0-2PIGSTY.el9.x86_64.rpm
pg_roaringbitmap_181.2.0el9.x86_64pgdg118.3 KiBpg_roaringbitmap_18-1.2.0-1PGDG.rhel9.8.x86_64.rpm
pg_roaringbitmap_181.1.0el9.x86_64pgdg116.5 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel9.8.x86_64.rpm
pg_roaringbitmap_181.1.0el9.x86_64pgdg116.4 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel9.x86_64.rpm
pg_roaringbitmap_181.0.0el9.x86_64pgdg116.2 KiBpg_roaringbitmap_18-1.0.0-1PGDG.rhel9.x86_64.rpm
pg_roaringbitmap_180.5.5el9.x86_64pgdg84.8 KiBpg_roaringbitmap_18-0.5.5-1PGDG.rhel9.x86_64.rpm
pg_roaringbitmap_181.2.0el9.aarch64pigsty103.2 KiBpg_roaringbitmap_18-1.2.0-2PIGSTY.el9.aarch64.rpm
pg_roaringbitmap_181.2.0el9.aarch64pgdg105.2 KiBpg_roaringbitmap_18-1.2.0-1PGDG.rhel9.8.aarch64.rpm
pg_roaringbitmap_181.1.0el9.aarch64pgdg103.4 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel9.8.aarch64.rpm
pg_roaringbitmap_181.1.0el9.aarch64pgdg103.4 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel9.aarch64.rpm
pg_roaringbitmap_181.0.0el9.aarch64pgdg103.0 KiBpg_roaringbitmap_18-1.0.0-1PGDG.rhel9.aarch64.rpm
pg_roaringbitmap_180.5.5el9.aarch64pgdg72.7 KiBpg_roaringbitmap_18-0.5.5-1PGDG.rhel9.aarch64.rpm
pg_roaringbitmap_181.2.0el10.x86_64pigsty118.5 KiBpg_roaringbitmap_18-1.2.0-2PIGSTY.el10.x86_64.rpm
pg_roaringbitmap_181.2.0el10.x86_64pgdg120.2 KiBpg_roaringbitmap_18-1.2.0-1PGDG.rhel10.2.x86_64.rpm
pg_roaringbitmap_181.1.0el10.x86_64pgdg118.3 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel10.2.x86_64.rpm
pg_roaringbitmap_181.1.0el10.x86_64pgdg118.3 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel10.x86_64.rpm
pg_roaringbitmap_181.0.0el10.x86_64pgdg118.4 KiBpg_roaringbitmap_18-1.0.0-1PGDG.rhel10.x86_64.rpm
pg_roaringbitmap_180.5.5el10.x86_64pgdg86.4 KiBpg_roaringbitmap_18-0.5.5-1PGDG.rhel10.x86_64.rpm
pg_roaringbitmap_181.2.0el10.aarch64pigsty104.3 KiBpg_roaringbitmap_18-1.2.0-2PIGSTY.el10.aarch64.rpm
pg_roaringbitmap_181.2.0el10.aarch64pgdg106.5 KiBpg_roaringbitmap_18-1.2.0-1PGDG.rhel10.2.aarch64.rpm
pg_roaringbitmap_181.1.0el10.aarch64pgdg104.9 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel10.2.aarch64.rpm
pg_roaringbitmap_181.1.0el10.aarch64pgdg104.8 KiBpg_roaringbitmap_18-1.1.0-1PGDG.rhel10.aarch64.rpm
pg_roaringbitmap_181.0.0el10.aarch64pgdg104.8 KiBpg_roaringbitmap_18-1.0.0-1PGDG.rhel10.aarch64.rpm
pg_roaringbitmap_180.5.5el10.aarch64pgdg73.4 KiBpg_roaringbitmap_18-0.5.5-1PGDG.rhel10.aarch64.rpm
postgresql-18-roaringbitmap1.2.0d12.x86_64pigsty465.7 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~bookworm_amd64.deb
postgresql-18-roaringbitmap1.2.0d12.x86_64pgdg462.9 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg12+1_amd64.deb
postgresql-18-roaringbitmap1.1.0d12.x86_64pgdg462.5 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg12+1_amd64.deb
postgresql-18-roaringbitmap1.2.0d12.aarch64pigsty424.5 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~bookworm_arm64.deb
postgresql-18-roaringbitmap1.2.0d12.aarch64pgdg423.2 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg12+1_arm64.deb
postgresql-18-roaringbitmap1.1.0d12.aarch64pgdg420.1 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg12+1_arm64.deb
postgresql-18-roaringbitmap1.2.0d13.x86_64pigsty468.7 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~trixie_amd64.deb
postgresql-18-roaringbitmap1.2.0d13.x86_64pgdg464.7 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg13+1_amd64.deb
postgresql-18-roaringbitmap1.1.0d13.x86_64pgdg465.0 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg13+1_amd64.deb
postgresql-18-roaringbitmap1.2.0d13.aarch64pigsty427.9 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~trixie_arm64.deb
postgresql-18-roaringbitmap1.2.0d13.aarch64pgdg423.9 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg13+1_arm64.deb
postgresql-18-roaringbitmap1.1.0d13.aarch64pgdg421.9 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg13+1_arm64.deb
postgresql-18-roaringbitmap1.2.0u22.x86_64pigsty448.9 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~jammy_amd64.deb
postgresql-18-roaringbitmap1.2.0u22.x86_64pgdg420.3 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg22.04+1_amd64.deb
postgresql-18-roaringbitmap1.1.0u22.x86_64pgdg416.0 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg22.04+1_amd64.deb
postgresql-18-roaringbitmap1.2.0u22.aarch64pigsty418.4 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~jammy_arm64.deb
postgresql-18-roaringbitmap1.2.0u22.aarch64pgdg388.6 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg22.04+1_arm64.deb
postgresql-18-roaringbitmap1.1.0u22.aarch64pgdg384.8 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg22.04+1_arm64.deb
postgresql-18-roaringbitmap1.2.0u24.x86_64pigsty436.6 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~noble_amd64.deb
postgresql-18-roaringbitmap1.2.0u24.x86_64pgdg412.0 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg24.04+1_amd64.deb
postgresql-18-roaringbitmap1.1.0u24.x86_64pgdg409.3 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg24.04+1_amd64.deb
postgresql-18-roaringbitmap1.2.0u24.aarch64pigsty408.2 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~noble_arm64.deb
postgresql-18-roaringbitmap1.2.0u24.aarch64pgdg380.6 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg24.04+1_arm64.deb
postgresql-18-roaringbitmap1.1.0u24.aarch64pgdg378.1 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg24.04+1_arm64.deb
postgresql-18-roaringbitmap1.2.0u26.x86_64pigsty431.8 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~resolute_amd64.deb
postgresql-18-roaringbitmap1.2.0u26.x86_64pgdg409.0 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg26.04+1_amd64.deb
postgresql-18-roaringbitmap1.1.0u26.x86_64pgdg406.0 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg26.04+1_amd64.deb
postgresql-18-roaringbitmap1.2.0u26.aarch64pigsty401.9 KiBpostgresql-18-roaringbitmap_1.2.0-2PIGSTY~resolute_arm64.deb
postgresql-18-roaringbitmap1.2.0u26.aarch64pgdg377.2 KiBpostgresql-18-roaringbitmap_1.2.0-1.pgdg26.04+1_arm64.deb
postgresql-18-roaringbitmap1.1.0u26.aarch64pgdg373.1 KiBpostgresql-18-roaringbitmap_1.1.0-1.pgdg26.04+1_arm64.deb

Source

pig build pkg pg_roaringbitmap;		# build rpm

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install pg_roaringbitmap;		# install via package name, for the active PG version
pig install roaringbitmap;		# install by extension name, for the current active PG version

pig install roaringbitmap -v 18;   # install for PG 18
pig install roaringbitmap -v 17;   # install for PG 17
pig install roaringbitmap -v 16;   # install for PG 16
pig install roaringbitmap -v 15;   # install for PG 15
pig install roaringbitmap -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION roaringbitmap;

Usage

Sources:

pg_roaringbitmap installs the PostgreSQL extension roaringbitmap, which provides compressed bitmap types and set-operation functions backed by Roaring Bitmaps. Use it for compact integer-set storage, fast unions/intersections, cohort filters, faceting, and bitmap aggregation.

v1.2.0 adds rb_runoptimize() / rb64_runoptimize() to shrink bitmap binary size, preserves the legacy rb_exsit spelling for backward compatibility, adds PostgreSQL 19 compatibility, and validates untrusted bitmap input in receive functions.

Create the Extension

CREATE EXTENSION IF NOT EXISTS roaringbitmap;

SET roaringbitmap.output_format = 'array';
SELECT rb_build(ARRAY[1, 2, 3, 4, 5]);

roaringbitmap.output_format can be bytea or array. The default output format is bytea, which is better for large bitmaps; array is easier to read interactively.

Data Types

  • roaringbitmap stores unsigned 32-bit integer sets over the logical range [0, 4294967296).
  • roaringbitmap64 stores unsigned 64-bit integer sets and uses the rb64_ function family.
CREATE TABLE cohorts (
  segment text PRIMARY KEY,
  users32 roaringbitmap,
  users64 roaringbitmap64
);

Build and Convert

INSERT INTO cohorts(segment, users32)
VALUES ('trial', rb_build(ARRAY[1, 2, 3, 100, 200]));

INSERT INTO cohorts(segment, users32)
SELECT 'active', rb_build_agg(id)
FROM generate_series(1, 100000) AS id;

SELECT rb_cardinality(users32) FROM cohorts WHERE segment = 'active';
SELECT rb_to_array(users32) FROM cohorts WHERE segment = 'trial';
SELECT rb_iterate(users32) FROM cohorts WHERE segment = 'trial';

For 64-bit values, use rb64_build(), rb64_build_agg(), rb64_to_array(), and rb64_iterate().

Set Operations

SELECT rb_build(ARRAY[1,2,3]) | rb_build(ARRAY[3,4,5]);  -- union
SELECT rb_build(ARRAY[1,2,3]) & rb_build(ARRAY[3,4,5]);  -- intersection
SELECT rb_build(ARRAY[1,2,3]) # rb_build(ARRAY[3,4,5]);  -- xor
SELECT rb_build(ARRAY[1,2,3]) - rb_build(ARRAY[3,4,5]);  -- difference

SELECT rb_build(ARRAY[1,2,3]) | 9;                       -- add element
SELECT rb_build(ARRAY[1,2,3]) - 2;                       -- remove element

Containment and overlap operators are available:

SELECT rb_build(ARRAY[1,2,3]) @> rb_build(ARRAY[2,3]);
SELECT rb_build(ARRAY[2,3]) <@ rb_build(ARRAY[1,2,3]);
SELECT rb_build(ARRAY[1,2,3]) && rb_build(ARRAY[3,4,5]);

Cardinality and Range Helpers

SELECT rb_and_cardinality(a.users32, b.users32);
SELECT rb_or_cardinality(a.users32, b.users32);
SELECT rb_xor_cardinality(a.users32, b.users32);
SELECT rb_andnot_cardinality(a.users32, b.users32);

SELECT rb_range(users32, 100, 1000);
SELECT rb_range_cardinality(users32, 100, 1000);
SELECT rb_fill(users32, 100, 200);
SELECT rb_clear(users32, 100, 200);
SELECT rb_flip(users32, 100, 200);

SELECT rb_min(users32), rb_max(users32), rb_rank(users32, 500), rb_index(users32, 500);
SELECT rb_jaccard_dist(a.users32, b.users32);

The 64-bit range helpers use the rb64_ prefix. Since v1.1.0, range_end = 0 means unlimited for several rb64_ range/select functions.

Aggregate Functions

SELECT rb_build_agg(user_id) FROM events;
SELECT rb_or_agg(users32) FROM cohorts;
SELECT rb_and_agg(users32) FROM cohorts;
SELECT rb_xor_agg(users32) FROM cohorts;

SELECT rb64_build_agg(user_id::bigint) FROM events;
SELECT rb64_or_agg(users64) FROM cohorts;

Optimize Serialized Size

UPDATE cohorts
SET users32 = rb_runoptimize(users32);

UPDATE cohorts
SET users64 = rb64_runoptimize(users64);

rb_runoptimize() and rb64_runoptimize() can reduce serialized bitmap size for suitable data distributions. Measure before using them in hot write paths.

Caveats

  • Pigsty uses extension file name roaringbitmap.md; the upstream package name is pg_roaringbitmap.
  • Source builds require PostgreSQL headers and CRoaring dependencies. The README notes regression testing before release covers PostgreSQL 13 and above.
  • Makefile_native can compile with SIMD instructions and may be faster on matching CPUs, but binaries built that way can crash with SIGILL on machines without the required CPU features.
  • Use bytea output for large bitmaps and array output for human inspection.
Last updated on