Skip to content
tdigest

tdigest

tdigest : Provides tdigest aggregate function.

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
4700
tdigest
tdigest
1.4.4
FUNC
Apache-2.0
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d-r
No
Yes
No
Yes
yes
no
Relationships
See Also
pg_idkit
pgx_ulid
pg_uuidv7
pg_hashids
sequential_uuids
topn
quantile
lower_quantile

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
1.4.4
18
17
16
15
14
tdigest-
RPM
PGDG
1.4.4
18
17
16
15
14
tdigest_$v-
DEB
PGDG
1.4.3
18
17
16
15
14
postgresql-$v-tdigest-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
el8.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
el9.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
el9.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
el10.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
el10.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
d12.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
d12.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
d13.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
d13.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
u22.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
u22.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
u24.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
u24.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
u26.x86_64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
u26.aarch64
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PGDG 1.4.4
PackageVersionOSORGSIZEFile URL
tdigest_181.4.4el8.x86_64pgdg34.7 KiBtdigest_18-1.4.4-4PGDG.rhel8.10.x86_64.rpm
tdigest_181.4.2el8.x86_64pgdg33.5 KiBtdigest_18-1.4.2-2PGDG.rhel8.x86_64.rpm
tdigest_181.4.4el8.aarch64pgdg33.4 KiBtdigest_18-1.4.4-4PGDG.rhel8.10.aarch64.rpm
tdigest_181.4.2el8.aarch64pgdg32.1 KiBtdigest_18-1.4.2-2PGDG.rhel8.aarch64.rpm
tdigest_181.4.4el9.x86_64pgdg34.5 KiBtdigest_18-1.4.4-4PGDG.rhel9.8.x86_64.rpm
tdigest_181.4.2el9.x86_64pgdg33.6 KiBtdigest_18-1.4.2-4PGDG.rhel9.8.x86_64.rpm
tdigest_181.4.2el9.x86_64pgdg33.6 KiBtdigest_18-1.4.2-2PGDG.rhel9.x86_64.rpm
tdigest_181.4.4el9.aarch64pgdg33.6 KiBtdigest_18-1.4.4-4PGDG.rhel9.8.aarch64.rpm
tdigest_181.4.2el9.aarch64pgdg32.4 KiBtdigest_18-1.4.2-4PGDG.rhel9.8.aarch64.rpm
tdigest_181.4.2el9.aarch64pgdg32.3 KiBtdigest_18-1.4.2-2PGDG.rhel9.aarch64.rpm
tdigest_181.4.4el10.x86_64pgdg34.6 KiBtdigest_18-1.4.4-4PGDG.rhel10.2.x86_64.rpm
tdigest_181.4.2el10.x86_64pgdg33.5 KiBtdigest_18-1.4.2-4PGDG.rhel10.2.x86_64.rpm
tdigest_181.4.2el10.x86_64pgdg33.8 KiBtdigest_18-1.4.2-2PGDG.rhel10.x86_64.rpm
tdigest_181.4.4el10.aarch64pgdg34.3 KiBtdigest_18-1.4.4-4PGDG.rhel10.2.aarch64.rpm
tdigest_181.4.2el10.aarch64pgdg32.9 KiBtdigest_18-1.4.2-4PGDG.rhel10.2.aarch64.rpm
tdigest_181.4.2el10.aarch64pgdg33.2 KiBtdigest_18-1.4.2-2PGDG.rhel10.aarch64.rpm
postgresql-18-tdigest1.4.4d12.x86_64pgdg59.7 KiBpostgresql-18-tdigest_1.4.4-1.pgdg12+1_amd64.deb
postgresql-18-tdigest1.4.3d12.x86_64pgdg57.6 KiBpostgresql-18-tdigest_1.4.3-2.pgdg12+1_amd64.deb
postgresql-18-tdigest1.4.4d12.aarch64pgdg59.2 KiBpostgresql-18-tdigest_1.4.4-1.pgdg12+1_arm64.deb
postgresql-18-tdigest1.4.3d12.aarch64pgdg56.7 KiBpostgresql-18-tdigest_1.4.3-2.pgdg12+1_arm64.deb
postgresql-18-tdigest1.4.4d13.x86_64pgdg59.8 KiBpostgresql-18-tdigest_1.4.4-1.pgdg13+1_amd64.deb
postgresql-18-tdigest1.4.3d13.x86_64pgdg57.5 KiBpostgresql-18-tdigest_1.4.3-2.pgdg13+1_amd64.deb
postgresql-18-tdigest1.4.4d13.aarch64pgdg59.6 KiBpostgresql-18-tdigest_1.4.4-1.pgdg13+1_arm64.deb
postgresql-18-tdigest1.4.3d13.aarch64pgdg56.9 KiBpostgresql-18-tdigest_1.4.3-2.pgdg13+1_arm64.deb
postgresql-18-tdigest1.4.4u22.x86_64pgdg59.7 KiBpostgresql-18-tdigest_1.4.4-1.pgdg22.04+1_amd64.deb
postgresql-18-tdigest1.4.3u22.x86_64pgdg58.0 KiBpostgresql-18-tdigest_1.4.3-2.pgdg22.04+1_amd64.deb
postgresql-18-tdigest1.4.4u22.aarch64pgdg58.9 KiBpostgresql-18-tdigest_1.4.4-1.pgdg22.04+1_arm64.deb
postgresql-18-tdigest1.4.3u22.aarch64pgdg57.0 KiBpostgresql-18-tdigest_1.4.3-2.pgdg22.04+1_arm64.deb
postgresql-18-tdigest1.4.4u24.x86_64pgdg59.7 KiBpostgresql-18-tdigest_1.4.4-1.pgdg24.04+1_amd64.deb
postgresql-18-tdigest1.4.3u24.x86_64pgdg57.7 KiBpostgresql-18-tdigest_1.4.3-2.pgdg24.04+1_amd64.deb
postgresql-18-tdigest1.4.4u24.aarch64pgdg59.1 KiBpostgresql-18-tdigest_1.4.4-1.pgdg24.04+1_arm64.deb
postgresql-18-tdigest1.4.3u24.aarch64pgdg56.9 KiBpostgresql-18-tdigest_1.4.3-2.pgdg24.04+1_arm64.deb
postgresql-18-tdigest1.4.4u26.x86_64pgdg59.2 KiBpostgresql-18-tdigest_1.4.4-1.pgdg26.04+1_amd64.deb
postgresql-18-tdigest1.4.3u26.x86_64pgdg57.3 KiBpostgresql-18-tdigest_1.4.3-2.pgdg26.04+1_amd64.deb
postgresql-18-tdigest1.4.4u26.aarch64pgdg59.0 KiBpostgresql-18-tdigest_1.4.4-1.pgdg26.04+1_arm64.deb
postgresql-18-tdigest1.4.3u26.aarch64pgdg56.9 KiBpostgresql-18-tdigest_1.4.3-2.pgdg26.04+1_arm64.deb

Source

Install

Make sure PGDG repo available:

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

Install this extension with pig:

pig install tdigest;		# install via package name, for the active PG version

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

Create this extension with:

CREATE EXTENSION tdigest;

Usage

tdigest: t-digest percentile estimation for PostgreSQL

Implements t-digest for on-line accumulation of rank-based statistics such as quantiles and trimmed means. Much faster than percentile_cont, supports parallelism, and allows pre-aggregation.

CREATE EXTENSION tdigest;

Direct Aggregation Functions

FunctionDescription
tdigest_percentile(value, compression, quantile)Estimate a single percentile
tdigest_percentile(value, compression, quantiles[])Estimate multiple percentiles
tdigest_percentile_of(value, compression, value)Estimate percentile rank of a value
tdigest_percentile_of(value, compression, values[])Estimate percentile ranks of multiple values

Pre-aggregation Functions

FunctionDescription
tdigest(value, compression)Build a t-digest from values
tdigest_percentile(digest, quantile)Estimate percentile from a pre-built digest
tdigest_percentile(digest, quantiles[])Estimate multiple percentiles from a pre-built digest

Incremental Update Functions

FunctionDescription
tdigest_add(digest, value)Add a single value to an existing digest
tdigest_add(digest, values[])Add an array of values to an existing digest
tdigest_union(digest, digest)Merge two digests

Utility Functions

FunctionDescription
tdigest_count(digest)Return the number of items in the digest
tdigest_sum(digest, low, high)Trimmed sum within a value range
tdigest_avg(digest, low, high)Trimmed average within a value range

Parameters

  • compression – controls accuracy (higher = more accurate, larger digest). Error is roughly 1/compression.

Examples

-- Instead of: SELECT percentile_cont(0.95) WITHIN GROUP (ORDER BY a) FROM t;
SELECT tdigest_percentile(a, 100, 0.95) FROM t;

-- Multiple percentiles
SELECT tdigest_percentile(a, 100, ARRAY[0.5, 0.95, 0.99]) FROM t;

-- Pre-aggregate for fast repeated queries
CREATE TABLE p AS SELECT a, b, tdigest(c, 100) AS d FROM t GROUP BY a, b;

-- Query pre-aggregated data (~1.5ms vs ~7s for exact)
SELECT a, tdigest_percentile(d, 0.95) FROM p GROUP BY a ORDER BY a;
Last updated on