Hello, If you execute pg_receivewal.exe with the option "--compression-method gzip" it will fail with no error. You can see an error in the db log:
2022-02-10 11:46:32.725 CET [11664][walsender] [pg_receivewal][3/0:0] LOG: could not receive data from client: An existing connection was forcibly closed by the remote host. Tracing the execution you can see: Unhandled exception at 0x00007FFEA78C1208 (ucrtbase.dll) in An invalid parameter was passed to a function that considers invalid parameters fatal. ucrtbase.dll!00007ff8e8ae36a2() Unknown > zlib1.dll!gz_comp(gz_state * state, int flush) Line 111 C zlib1.dll!gz_write(gz_state * state, const void * buf, unsigned __int64 len) Line 235 C pg_receivewal.exe!dir_write(void * f, const void * buf, unsigned __int64 count) Line 300 C pg_receivewal.exe!ProcessXLogDataMsg(pg_conn * conn, StreamCtl * stream, char * copybuf, int len, unsigned __int64 * blockpos) Line 1150 C pg_receivewal.exe!HandleCopyStream(pg_conn * conn, StreamCtl * stream, unsigned __int64 * stoppos) Line 850 C pg_receivewal.exe!ReceiveXlogStream(pg_conn * conn, StreamCtl * stream) Line 605 C pg_receivewal.exe!StreamLog() Line 636 C pg_receivewal.exe!main(int argc, char * * argv) Line 1005 C The problem comes from the file descriptor passed to gzdopen() in 'src/bin/pg_basebackup/walmethods.c'. Using gzopen() instead, solves the issue without ifdefing for WIN32. Please find attached a patch for so. Regards, Juan José Santamaría Flecha
diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index a6d08c1..bc0790a 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -143,7 +143,7 @@ dir_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_ #ifdef HAVE_LIBZ if (dir_data->compression_method == COMPRESSION_GZIP) { - gzfp = gzdopen(fd, "wb"); + gzfp = gzopen(tmppath, "wb"); if (gzfp == NULL) { dir_data->lasterrno = errno;