zstd
Zstandard compression algorithm implementation in PostgreSQL
Overview
Attributes
Yes | No | Yes | No | Yes | Yes | Unknown | - |
Packages
EL | PIGSTY | pg_zstd_$v* | 1.1.2 | - | 17 16 15 14 13 |
Debian | PIGSTY | postgresql-$v-zstd | 1.1.2 | - | 17 16 15 14 13 |
Comments
+varatt.h
Availability
PG17 | PG16 | PG15 | PG14 | PG13 | |
---|---|---|---|---|---|
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 |
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
Function | Return 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