summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-04-27 13:34:05 +0900
committerMichael Paquier <michael@paquier.xyz>2023-04-27 13:34:05 +0900
commitbedc1f0564d12c4a89fc9de3044201166542dc3d (patch)
treeeb95b475ae0caf15a4a39b7ca9b999e0903d6476
parent7b7fa85130330128b404eddebd4f33c6739454b0 (diff)
downloadpostgresql-bedc1f0564d12c4a89fc9de3044201166542dc3d.tar.gz
Rework code defining default compression for dir/custom formats in pg_dump
As written, pg_dump would call twice parse_compress_specification() for the custom and directory formats to build a compression specification if no compression option is defined, as these formats should be compressed by default when compiled with zlib, or use no compression without zlib. This made the code logic quite confusing, and the first compression specification built would be incorrect before being overwritten by the second one. Rather than creating two compression specifications, this commit changes a bit the order of the checks for the compression options so as compression_algorithm_str is now set to a correct value for the custom and format directory when no compression option is defined. This makes the code easier to understand, as parse_compress_specification() is now called once for all the format, with or without user-specified compression methods. One comment was also confusing for the non-zlib case, so remove it while on it. This code has been introduced in 5e73a60 when adding support for compression specifications in pg_dump. Per discussion with Justin Pryzby and Georgios Kokolatos. Discussion: https://postgr.es/m/20230225050214.GH1653@telsasoft.com
-rw-r--r--src/bin/pg_dump/pg_dump.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 058244cd17..41a51ec5cd 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -722,6 +722,21 @@ main(int argc, char **argv)
plainText = 1;
/*
+ * Custom and directory formats are compressed by default with gzip when
+ * available, not the others. If gzip is not available, no compression is
+ * done by default.
+ */
+ if ((archiveFormat == archCustom || archiveFormat == archDirectory) &&
+ !user_compression_defined)
+ {
+#ifdef HAVE_LIBZ
+ compression_algorithm_str = "gzip";
+#else
+ compression_algorithm_str = "none";
+#endif
+ }
+
+ /*
* Compression options
*/
if (!parse_compress_algorithm(compression_algorithm_str,
@@ -750,21 +765,6 @@ main(int argc, char **argv)
"workers");
/*
- * Custom and directory formats are compressed by default with gzip when
- * available, not the others.
- */
- if ((archiveFormat == archCustom || archiveFormat == archDirectory) &&
- !user_compression_defined)
- {
-#ifdef HAVE_LIBZ
- parse_compress_specification(PG_COMPRESSION_GZIP, NULL,
- &compression_spec);
-#else
- /* Nothing to do in the default case */
-#endif
- }
-
- /*
* If emitting an archive format, we always want to emit a DATABASE item,
* in case --create is specified at pg_restore time.
*/