tdigest

tdigest

tdigest : Provides tdigest aggregate function.

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
4700
tdigest
tdigest
1.4.3
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.3
18
17
16
15
14
tdigest-
RPM
PGDG
1.4.2
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.2
PGDG 1.4.2
PGDG 1.4.1
PGDG 1.4.1
PGDG 1.4.1
el8.aarch64
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.1
PGDG 1.4.1
PGDG 1.4.1
el9.x86_64
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.1
PGDG 1.4.1
PGDG 1.4.1
el9.aarch64
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.1
PGDG 1.4.1
PGDG 1.4.1
el10.x86_64
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.2
el10.aarch64
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.2
PGDG 1.4.2
d12.x86_64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
d12.aarch64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
d13.x86_64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
d13.aarch64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
u22.x86_64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
u22.aarch64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
u24.x86_64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
u24.aarch64
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PGDG 1.4.3
PackageVersionOSORGSIZEFile URL
tdigest_171.4.2el8.x86_64pgdg33.5 KiBtdigest_17-1.4.2-1PGDG.rhel8.x86_64.rpm
tdigest_171.4.1el8.x86_64pgdg33.2 KiBtdigest_17-1.4.1-3PGDG.rhel8.x86_64.rpm
tdigest_171.4.2el8.aarch64pgdg32.1 KiBtdigest_17-1.4.2-1PGDG.rhel8.aarch64.rpm
tdigest_171.4.1el8.aarch64pgdg31.8 KiBtdigest_17-1.4.1-3PGDG.rhel8.aarch64.rpm
tdigest_171.4.2el9.x86_64pgdg33.6 KiBtdigest_17-1.4.2-1PGDG.rhel9.x86_64.rpm
tdigest_171.4.1el9.x86_64pgdg33.3 KiBtdigest_17-1.4.1-3PGDG.rhel9.x86_64.rpm
tdigest_171.4.2el9.aarch64pgdg32.4 KiBtdigest_17-1.4.2-1PGDG.rhel9.aarch64.rpm
tdigest_171.4.1el9.aarch64pgdg32.1 KiBtdigest_17-1.4.1-3PGDG.rhel9.aarch64.rpm
tdigest_171.4.2el10.x86_64pgdg33.8 KiBtdigest_17-1.4.2-2PGDG.rhel10.x86_64.rpm
tdigest_171.4.2el10.aarch64pgdg33.2 KiBtdigest_17-1.4.2-2PGDG.rhel10.aarch64.rpm
postgresql-17-tdigest1.4.3d12.x86_64pgdg57.6 KiBpostgresql-17-tdigest_1.4.3-2.pgdg12+1_amd64.deb
postgresql-17-tdigest1.4.3d12.aarch64pgdg56.7 KiBpostgresql-17-tdigest_1.4.3-2.pgdg12+1_arm64.deb
postgresql-17-tdigest1.4.3d13.x86_64pgdg57.5 KiBpostgresql-17-tdigest_1.4.3-2.pgdg13+1_amd64.deb
postgresql-17-tdigest1.4.3d13.aarch64pgdg57.0 KiBpostgresql-17-tdigest_1.4.3-2.pgdg13+1_arm64.deb
postgresql-17-tdigest1.4.3u22.x86_64pgdg60.2 KiBpostgresql-17-tdigest_1.4.3-2.pgdg22.04+1_amd64.deb
postgresql-17-tdigest1.4.3u22.aarch64pgdg59.3 KiBpostgresql-17-tdigest_1.4.3-2.pgdg22.04+1_arm64.deb
postgresql-17-tdigest1.4.3u24.x86_64pgdg57.6 KiBpostgresql-17-tdigest_1.4.3-2.pgdg24.04+1_amd64.deb
postgresql-17-tdigest1.4.3u24.aarch64pgdg56.9 KiBpostgresql-17-tdigest_1.4.3-2.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
tdigest_151.4.1el8.x86_64pgdg33.0 KiBtdigest_15-1.4.1-1PGDG.rhel8.x86_64.rpm
tdigest_151.4.0el8.x86_64pgdg70.1 KiBtdigest_15-1.4.0-1.rhel8.x86_64.rpm
tdigest_151.4.1el8.aarch64pgdg31.6 KiBtdigest_15-1.4.1-1PGDG.rhel8.aarch64.rpm
tdigest_151.4.0el8.aarch64pgdg68.6 KiBtdigest_15-1.4.0-1.rhel8.aarch64.rpm
tdigest_151.4.1el9.x86_64pgdg33.1 KiBtdigest_15-1.4.1-1PGDG.rhel9.x86_64.rpm
tdigest_151.4.0el9.x86_64pgdg72.1 KiBtdigest_15-1.4.0-1.rhel9.x86_64.rpm
tdigest_151.4.1el9.aarch64pgdg31.6 KiBtdigest_15-1.4.1-1PGDG.rhel9.aarch64.rpm
tdigest_151.4.0el9.aarch64pgdg70.6 KiBtdigest_15-1.4.0-1.rhel9.aarch64.rpm
tdigest_151.4.2el10.x86_64pgdg33.8 KiBtdigest_15-1.4.2-2PGDG.rhel10.x86_64.rpm
tdigest_151.4.2el10.aarch64pgdg33.2 KiBtdigest_15-1.4.2-2PGDG.rhel10.aarch64.rpm
postgresql-15-tdigest1.4.3d12.x86_64pgdg57.6 KiBpostgresql-15-tdigest_1.4.3-2.pgdg12+1_amd64.deb
postgresql-15-tdigest1.4.3d12.aarch64pgdg56.7 KiBpostgresql-15-tdigest_1.4.3-2.pgdg12+1_arm64.deb
postgresql-15-tdigest1.4.3d13.x86_64pgdg57.5 KiBpostgresql-15-tdigest_1.4.3-2.pgdg13+1_amd64.deb
postgresql-15-tdigest1.4.3d13.aarch64pgdg57.0 KiBpostgresql-15-tdigest_1.4.3-2.pgdg13+1_arm64.deb
postgresql-15-tdigest1.4.3u22.x86_64pgdg60.5 KiBpostgresql-15-tdigest_1.4.3-2.pgdg22.04+1_amd64.deb
postgresql-15-tdigest1.4.3u22.aarch64pgdg59.5 KiBpostgresql-15-tdigest_1.4.3-2.pgdg22.04+1_arm64.deb
postgresql-15-tdigest1.4.3u24.x86_64pgdg57.6 KiBpostgresql-15-tdigest_1.4.3-2.pgdg24.04+1_amd64.deb
postgresql-15-tdigest1.4.3u24.aarch64pgdg56.9 KiBpostgresql-15-tdigest_1.4.3-2.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
tdigest_141.4.1el8.x86_64pgdg33.0 KiBtdigest_14-1.4.1-1PGDG.rhel8.x86_64.rpm
tdigest_141.2.0el8.x86_64pgdg60.3 KiBtdigest_14-1.2.0-2.rhel8.x86_64.rpm
tdigest_141.4.1el8.aarch64pgdg31.6 KiBtdigest_14-1.4.1-1PGDG.rhel8.aarch64.rpm
tdigest_141.4.0el8.aarch64pgdg68.5 KiBtdigest_14-1.4.0-1.rhel8.aarch64.rpm
tdigest_141.4.1el9.x86_64pgdg33.1 KiBtdigest_14-1.4.1-1PGDG.rhel9.x86_64.rpm
tdigest_141.4.0el9.x86_64pgdg72.2 KiBtdigest_14-1.4.0-1.rhel9.x86_64.rpm
tdigest_141.4.1el9.aarch64pgdg31.6 KiBtdigest_14-1.4.1-1PGDG.rhel9.aarch64.rpm
tdigest_141.4.0el9.aarch64pgdg70.6 KiBtdigest_14-1.4.0-1.rhel9.aarch64.rpm
tdigest_141.4.2el10.x86_64pgdg33.8 KiBtdigest_14-1.4.2-2PGDG.rhel10.x86_64.rpm
tdigest_141.4.2el10.aarch64pgdg33.2 KiBtdigest_14-1.4.2-2PGDG.rhel10.aarch64.rpm
postgresql-14-tdigest1.4.3d12.x86_64pgdg57.5 KiBpostgresql-14-tdigest_1.4.3-2.pgdg12+1_amd64.deb
postgresql-14-tdigest1.4.3d12.aarch64pgdg56.7 KiBpostgresql-14-tdigest_1.4.3-2.pgdg12+1_arm64.deb
postgresql-14-tdigest1.4.3d13.x86_64pgdg57.5 KiBpostgresql-14-tdigest_1.4.3-2.pgdg13+1_amd64.deb
postgresql-14-tdigest1.4.3d13.aarch64pgdg56.9 KiBpostgresql-14-tdigest_1.4.3-2.pgdg13+1_arm64.deb
postgresql-14-tdigest1.4.3u22.x86_64pgdg60.4 KiBpostgresql-14-tdigest_1.4.3-2.pgdg22.04+1_amd64.deb
postgresql-14-tdigest1.4.3u22.aarch64pgdg59.4 KiBpostgresql-14-tdigest_1.4.3-2.pgdg22.04+1_arm64.deb
postgresql-14-tdigest1.4.3u24.x86_64pgdg57.5 KiBpostgresql-14-tdigest_1.4.3-2.pgdg24.04+1_amd64.deb
postgresql-14-tdigest1.4.3u24.aarch64pgdg56.9 KiBpostgresql-14-tdigest_1.4.3-2.pgdg24.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