Allow pg_basebackup compressed tar output to stdout

This commit is contained in:
Peter Eisentraut 2011-05-29 01:17:37 +03:00
parent 1b6dabc452
commit d68714b29c
2 changed files with 25 additions and 12 deletions

View File

@ -174,8 +174,7 @@ PostgreSQL documentation
<listitem>
<para>
Enables gzip compression of tar file output. Compression is only
available when generating tar files, and is not available when sending
output to standard output.
available when using the tar format.
</para>
</listitem>
</varlistentry>

View File

@ -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
/*