v002-wal-compression-on-zstd-lz4.patch
application/octet-stream
Filename: v002-wal-compression-on-zstd-lz4.patch
Type: application/octet-stream
Part: 0
Patch
Format: unified
Series: patch v2
| File | + | − |
|---|---|---|
| doc/src/sgml/config.sgml | 3 | 0 |
| src/backend/utils/misc/guc_tables.c | 4 | 4 |
| src/backend/utils/misc/postgresql.conf.sample | 2 | 0 |
| src/include/access/xlog.h | 13 | 0 |
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 009295f20e9..2282c9e99b8 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -3634,6 +3634,9 @@ include_dir 'conf.d'
was compiled with <option>--with-lz4</option>) and
<literal>zstd</literal> (if <productname>PostgreSQL</productname>
was compiled with <option>--with-zstd</option>).
+ The value <literal>on</literal> selects <literal>zstd</literal>, if
+ available; otherwise, it selects <literal>lz4</literal>, if available;
+ otherwise, it selects <literal>pglz</literal>.
The default value is <literal>off</literal>.
Only superusers and users with the appropriate <literal>SET</literal>
privilege can change this setting.
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c
index 290ccbc543e..9efd34aafea 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -484,13 +484,13 @@ static const struct config_enum_entry wal_compression_options[] = {
#ifdef USE_ZSTD
{"zstd", WAL_COMPRESSION_ZSTD, false},
#endif
- {"on", WAL_COMPRESSION_PGLZ, false},
+ {"on", DEFAULT_WAL_COMPRESSION, false},
{"off", WAL_COMPRESSION_NONE, false},
- {"true", WAL_COMPRESSION_PGLZ, true},
+ {"true", DEFAULT_WAL_COMPRESSION, true},
{"false", WAL_COMPRESSION_NONE, true},
- {"yes", WAL_COMPRESSION_PGLZ, true},
+ {"yes", DEFAULT_WAL_COMPRESSION, true},
{"no", WAL_COMPRESSION_NONE, true},
- {"1", WAL_COMPRESSION_PGLZ, true},
+ {"1", DEFAULT_WAL_COMPRESSION, true},
{"0", WAL_COMPRESSION_NONE, true},
{NULL, 0, false}
};
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index ac38cddaaf9..43cb28fce48 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -263,6 +263,8 @@
# (change requires restart)
#wal_compression = off # enables compression of full-page writes;
# off, pglz, lz4, zstd, or on
+ # (on = zstd if available, else lz4 if
+ # available, else pglz)
#wal_init_zero = on # zero-fill new WAL files
#wal_recycle = on # recycle WAL files
#wal_buffers = -1 # min 32kB, -1 sets based on shared_buffers
diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index 437b4f32349..a7c46352b30 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -87,6 +87,19 @@ typedef enum WalCompression
WAL_COMPRESSION_ZSTD,
} WalCompression;
+/*
+ * Choose an appropriate default WAL compression method for wal_compression=on.
+ * Prefer zstd when compiled in; otherwise use lz4 if available, falling back
+ * to pglz.
+ */
+#ifdef USE_ZSTD
+#define DEFAULT_WAL_COMPRESSION WAL_COMPRESSION_ZSTD
+#elif defined(USE_LZ4)
+#define DEFAULT_WAL_COMPRESSION WAL_COMPRESSION_LZ4
+#else
+#define DEFAULT_WAL_COMPRESSION WAL_COMPRESSION_PGLZ
+#endif
+
/* Recovery states */
typedef enum RecoveryState
{