PIGSTY

zstd

Zstandard compression algorithm implementation in PostgreSQL

Overview

Attributes

YesNoYesNoYesYesUnknown-

Packages

EL
PIGSTY
pg_zstd_$v*1.1.2-
17
16
15
14
13
Debian
PIGSTY
postgresql-$v-zstd1.1.2-
17
16
15
14
13

Comments

+varatt.h


Availability

PG17PG16PG15PG14PG13
el8.x86_64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
el8.aarch64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
el9.x86_64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
el9.aarch64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
d12.x86_64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
d12.aarch64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
u22.x86_64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
u22.aarch64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
u24.x86_64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
u24.aarch64
1.1.2
1.1.2
1.1.2
1.1.2
1.1.2
CONTRIB
PGDG
PIGSTY

Download

To add the required PGDG / PIGSTY upstream repository, use:

pig repo add pgdg -u    # add PGDG repo and update cache (leave existing repos)
pig repo add pigsty -u  # add PIGSTY repo and update cache (leave existing repos)
pig repo add pgsql -u   # add PGDG + Pigsty repo and update cache (leave existing repos)
pig repo set all -u     # set repo to all = NODE + PGSQL + INFRA  (remove existing repos)
./node.yml -t node_repo -e node_repo_modules=node,pgsql # -l <cluster>

Or download the latest packages directly:


Install

Install this extension with:

pig ext install zstd; # install by extension name, for the current active PG version
pig ext install pg_zstd; # install via package alias, for the active PG version
pig ext install zstd -v 17;   # install for PG 17
pig ext install zstd -v 16;   # install for PG 16
pig ext install zstd -v 15;   # install for PG 15
pig ext install zstd -v 14;   # install for PG 14
pig ext install zstd -v 13;   # install for PG 13
dnf install pg_zstd_17*;
dnf install pg_zstd_16*;
dnf install pg_zstd_15*;
dnf install pg_zstd_14*;
dnf install pg_zstd_13*;
apt install postgresql-17-zstd;
apt install postgresql-16-zstd;
apt install postgresql-15-zstd;
apt install postgresql-14-zstd;
apt install postgresql-13-zstd;
./pgsql.yml -t pg_ext -e '{"pg_extensions": ["pg_zstd"]}' # -l <cls>

Create this extension with:

CREATE EXTENSION zstd;

Usage

FunctionReturn Type
zstd_compress(data bytea [, dictionary bytea [, level integer ]])bytea
zstd_decompress(data bytea [, dictionary bytea ])bytea
zstd_length(data bytea)integer

zstd_compress compresses the provided data and returns a Zstandard frame. A preset dictionary may also be provided. The default compression level may also be overriden, valid values range from 1 (best speed) to 22 (best compression). The default level is 3.

If you want to override the compression level without using a dictionary, set dictionary to NULL.

zstd_decompress decompresses the provided Zstandard frame in data and returns the uncompressed data. A preset dictionary, matching the dictionary used to compress the data, may also be provided.

zstd_length returns the decompressed length of the provided Zstandard frame. If ZSTD_getFrameContentSize() is available it returns NULL if the length is unknown. If unavailable, it isn't possible to distinguish the error, unknown decompressed length and zero decompressed length cases.

Example

Basic compress/decompress example:

CREATE EXTENSION zstd;

SELECT zstd_compress('hello world');
-- zstd_compress
-- --------------------------------------------
-- \x28b52ffd200b59000068656c6c6f20776f726c64

SELECT convert_from(zstd_decompress('\x28b52ffd200b59000068656c6c6f20776f726c64'), 'utf-8');
-- convert_from
-- --------------
--  hello world

Compress with level (1 for best speed, 22 for best compression, default to 3)

CREATE EXTENSION zstd;

SELECT zstd_compress('hello world',  NULL, 10);
-- zstd_compress
-- --------------------------------------------
-- \x28b52ffd200b59000068656c6c6f20776f726c64

SELECT convert_from(zstd_decompress('\x28b52ffd200b59000068656c6c6f20776f726c64'), 'utf-8');
-- convert_from
-- --------------
--  hello world