diff --git a/.cirrus.tasks.yml b/.cirrus.tasks.yml index 4841a204248..a3107f82730 100644 --- a/.cirrus.tasks.yml +++ b/.cirrus.tasks.yml @@ -984,6 +984,7 @@ task: --host=x86_64-w64-mingw32ucrt \ --enable-cassert \ --without-icu \ + --without-lz4 \ CC="ccache x86_64-w64-mingw32ucrt-gcc" \ CXX="ccache x86_64-w64-mingw32ucrt-g++" make -s -j${BUILD_JOBS} clean diff --git a/configure b/configure index b30b98a586e..7afd8ba01e8 100755 --- a/configure +++ b/configure @@ -1603,7 +1603,7 @@ Optional Packages: --with-system-tzdata=DIR use system time zone data in DIR --without-zlib do not use Zlib - --with-lz4 build with LZ4 support + --without-lz4 build without LZ4 support --with-zstd build with ZSTD support --with-ssl=LIB use LIB for SSL/TLS support (openssl) --with-openssl obsolete spelling of --with-ssl=openssl @@ -9570,7 +9570,9 @@ $as_echo "#define USE_LZ4 1" >>confdefs.h esac else - with_lz4=no + with_lz4=yes + +$as_echo "#define USE_LZ4 1" >>confdefs.h fi diff --git a/configure.ac b/configure.ac index f4e3bd307c8..60d1c1900f2 100644 --- a/configure.ac +++ b/configure.ac @@ -1188,7 +1188,7 @@ AC_SUBST(with_zlib) # LZ4 # AC_MSG_CHECKING([whether to build with LZ4 support]) -PGAC_ARG_BOOL(with, lz4, no, [build with LZ4 support], +PGAC_ARG_BOOL(with, lz4, yes, [build without LZ4 support], [AC_DEFINE([USE_LZ4], 1, [Define to 1 to build with LZ4 support. (--with-lz4)])]) AC_MSG_RESULT([$with_lz4]) AC_SUBST(with_lz4) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index f670e2d4c31..6779bc844d0 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3498,10 +3498,9 @@ include_dir 'conf.d' etc.). A compressed page image will be decompressed during WAL replay. The supported methods are pglz, - lz4 (if PostgreSQL - was compiled with ) and - zstd (if PostgreSQL - was compiled with ). + lz4 and zstd (if + PostgreSQL was compiled with + ). The default value is off. Only superusers and users with the appropriate SET privilege can change this setting. @@ -10018,9 +10017,9 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; CREATE TABLE or ALTER TABLE.) The supported compression methods are pglz and - (if PostgreSQL was compiled with - ) lz4. - The default is pglz. + lz4. + The default is lz4 (if available); otherwise, + pglz. diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index b345a105674..a026ffea68d 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -975,15 +975,6 @@ build-postgresql: - - - - - Build with LZ4 compression support. - - - - @@ -1315,6 +1306,18 @@ build-postgresql: + + + + + + lz4 + + Prevents use of the LZ4 library. + + + + diff --git a/doc/src/sgml/ref/alter_table.sgml b/doc/src/sgml/ref/alter_table.sgml index aab2c6eb19f..9d2c87b660a 100644 --- a/doc/src/sgml/ref/alter_table.sgml +++ b/doc/src/sgml/ref/alter_table.sgml @@ -462,9 +462,7 @@ WITH ( MODULUS numeric_literal, REM its existing compression method, rather than being recompressed with the compression method of the target column. The supported compression - methods are pglz and lz4. - (lz4 is available only if - was used when building PostgreSQL.) In + methods are pglz and lz4. In addition, compression_method can be default, which selects the default behavior of consulting the setting diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index 982532fe725..188bc11e940 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -344,9 +344,7 @@ WITH ( MODULUS numeric_literal, REM has no direct effect, because such tables have no storage of their own, but the configured value will be inherited by newly-created partitions. The supported compression methods are pglz and - lz4. (lz4 is available only if - was used when building - PostgreSQL.) In addition, + lz4. In addition, compression_method can be default to explicitly specify the default behavior, which is to consult the diff --git a/doc/src/sgml/ref/pg_receivewal.sgml b/doc/src/sgml/ref/pg_receivewal.sgml index 9e353a068e5..1896f4da0e8 100644 --- a/doc/src/sgml/ref/pg_receivewal.sgml +++ b/doc/src/sgml/ref/pg_receivewal.sgml @@ -275,9 +275,7 @@ PostgreSQL documentation The compression method can be set to gzip, - lz4 (if PostgreSQL - was compiled with ) or - none for no compression. + lz4 or none for no compression. A compression detail string can optionally be specified. If the detail string is an integer, it specifies the compression level. Otherwise, it should be a comma-separated list of items, each of the diff --git a/src/backend/access/common/toast_compression.c b/src/backend/access/common/toast_compression.c index 4d00537049e..5a5d579494a 100644 --- a/src/backend/access/common/toast_compression.c +++ b/src/backend/access/common/toast_compression.c @@ -23,7 +23,7 @@ #include "varatt.h" /* GUC */ -int default_toast_compression = TOAST_PGLZ_COMPRESSION; +int default_toast_compression = DEFAULT_TOAST_COMPRESSION; #define NO_COMPRESSION_SUPPORT(method) \ ereport(ERROR, \ diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat index 9507778415d..5ee84a639d8 100644 --- a/src/backend/utils/misc/guc_parameters.dat +++ b/src/backend/utils/misc/guc_parameters.dat @@ -735,7 +735,7 @@ { name => 'default_toast_compression', type => 'enum', context => 'PGC_USERSET', group => 'CLIENT_CONN_STATEMENT', short_desc => 'Sets the default compression method for compressible values.', variable => 'default_toast_compression', - boot_val => 'TOAST_PGLZ_COMPRESSION', + boot_val => 'DEFAULT_TOAST_COMPRESSION', options => 'default_toast_compression_options', }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index f938cc65a3a..e686d88afc4 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -779,7 +779,7 @@ #row_security = on #default_table_access_method = 'heap' #default_tablespace = '' # a tablespace name, '' uses the default -#default_toast_compression = 'pglz' # 'pglz' or 'lz4' +#default_toast_compression = pglz # pglz or lz4 #temp_tablespaces = '' # a list of tablespace names, '' uses # only default tablespace #check_function_bodies = on diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 53ec1544ff3..6387c66289e 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -1426,6 +1426,11 @@ setup_config(void) "0640", false); } +#if USE_LZ4 + conflines = replace_guc_value(conflines, "default_toast_compression", + "lz4", true); +#endif + /* * Now replace anything that's overridden via -c switches. */ diff --git a/src/include/access/toast_compression.h b/src/include/access/toast_compression.h index 5f3ffa9ab2d..3265f10b734 100644 --- a/src/include/access/toast_compression.h +++ b/src/include/access/toast_compression.h @@ -52,6 +52,15 @@ typedef enum ToastCompressionId #define CompressionMethodIsValid(cm) ((cm) != InvalidCompressionMethod) +/* + * Choose an appropriate default toast compression method. If lz4 is + * compiled-in, use it, otherwise use pglz. + */ +#ifdef USE_LZ4 +#define DEFAULT_TOAST_COMPRESSION TOAST_LZ4_COMPRESSION +#else +#define DEFAULT_TOAST_COMPRESSION TOAST_PGLZ_COMPRESSION +#endif /* pglz compression/decompression routines */ extern varlena *pglz_compress_datum(const varlena *value);