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);