From: Heikki Linnakangas Date: Fri, 16 May 2014 07:10:45 +0000 (+0300) Subject: Open output file before sleeping in pg_recvlogical. X-Git-Tag: REL9_4_BETA2~178 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e7873b74d9c1bb7a325960f52043db6de88e6e66;p=postgresql Open output file before sleeping in pg_recvlogical. Let's complain about e.g an invalid path or permission problem sooner rather than later. Before this patch, we would only try to open the output file after receiving the first decoded message from the server. --- diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c index 9058c3daa7..a58530372e 100644 --- a/src/bin/pg_basebackup/pg_recvlogical.c +++ b/src/bin/pg_basebackup/pg_recvlogical.c @@ -315,6 +315,23 @@ StreamLog(void) } output_reopen = false; + /* open the output file, if not open yet */ + if (outfd == -1) + { + if (strcmp(outfile, "-") == 0) + outfd = fileno(stdout); + else + outfd = open(outfile, O_CREAT | O_APPEND | O_WRONLY | PG_BINARY, + S_IRUSR | S_IWUSR); + if (outfd == -1) + { + fprintf(stderr, + _("%s: could not open log file \"%s\": %s\n"), + progname, outfile, strerror(errno)); + goto error; + } + } + r = PQgetCopyData(conn, ©buf, 1); if (r == 0) { @@ -479,23 +496,6 @@ StreamLog(void) output_written_lsn = Max(temp, output_written_lsn); } - /* open the output file, if not open yet */ - if (outfd == -1) - { - if (strcmp(outfile, "-") == 0) - outfd = fileno(stdout); - else - outfd = open(outfile, O_CREAT | O_APPEND | O_WRONLY | PG_BINARY, - S_IRUSR | S_IWUSR); - if (outfd == -1) - { - fprintf(stderr, - _("%s: could not open log file \"%s\": %s\n"), - progname, outfile, strerror(errno)); - goto error; - } - } - bytes_left = r - hdr_len; bytes_written = 0;