aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 1f31fe0694c..2af7b50586f 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -261,7 +261,22 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
* Base tablespaces
*/
if (strcmp(basedir, "-") == 0)
- tarfile = stdout;
+ {
+#ifdef HAVE_LIBZ
+ if (compresslevel > 0)
+ {
+ ztarfile = gzdopen(dup(fileno(stdout)), "wb");
+ if (gzsetparams(ztarfile, compresslevel, Z_DEFAULT_STRATEGY) != Z_OK)
+ {
+ fprintf(stderr, _("%s: could not set compression level %i: %s\n"),
+ progname, compresslevel, get_gz_error(ztarfile));
+ disconnect_and_exit(1);
+ }
+ }
+ else
+#endif
+ tarfile = stdout;
+ }
else
{
#ifdef HAVE_LIBZ
@@ -384,7 +399,14 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
}
}
- if (strcmp(basedir, "-") != 0)
+ if (strcmp(basedir, "-") == 0)
+ {
+#ifdef HAVE_LIBZ
+ if (ztarfile)
+ gzclose(ztarfile);
+#endif
+ }
+ else
{
#ifdef HAVE_LIBZ
if (ztarfile != NULL)
@@ -1076,14 +1098,6 @@ main(int argc, char **argv)
progname);
exit(1);
}
-#else
- if (compresslevel > 0 && strcmp(basedir, "-") == 0)
- {
- fprintf(stderr,
- _("%s: compression is not supported on standard output\n"),
- progname);
- exit(1);
- }
#endif
/*