mirror of
https://github.com/postgres/postgres.git
synced 2025-11-21 00:42:43 +03:00
Support long distance matching for zstd compression
zstd compression supports a special mode for finding matched in distant past, which may result in better compression ratio, at the expense of using more memory (the window size is 128MB). To enable this optional mode, use the "long" keyword when specifying the compression method (--compress=zstd:long). Author: Justin Pryzby Reviewed-by: Tomas Vondra, Jacob Champion Discussion: https://postgr.es/m/20230224191840.GD1653@telsasoft.com Discussion: https://postgr.es/m/20220327205020.GM28503@telsasoft.com
This commit is contained in:
@@ -118,6 +118,18 @@ bbsink_zstd_begin_backup(bbsink *sink)
|
||||
compress->workers, ZSTD_getErrorName(ret)));
|
||||
}
|
||||
|
||||
if ((compress->options & PG_COMPRESSION_OPTION_LONG_DISTANCE) != 0)
|
||||
{
|
||||
ret = ZSTD_CCtx_setParameter(mysink->cctx,
|
||||
ZSTD_c_enableLongDistanceMatching,
|
||||
compress->long_distance);
|
||||
if (ZSTD_isError(ret))
|
||||
ereport(ERROR,
|
||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("could not set compression flag for %s: %s",
|
||||
"long", ZSTD_getErrorName(ret)));
|
||||
}
|
||||
|
||||
/*
|
||||
* We need our own buffer, because we're going to pass different data to
|
||||
* the next sink than what gets passed to us.
|
||||
|
||||
Reference in New Issue
Block a user