From: Bruce Momjian Date: Wed, 5 Sep 2012 04:01:13 +0000 (-0400) Subject: In pg_upgrade, document why we can't issue \n\n in the command logfile X-Git-Tag: REL9_3_BETA1~939 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=022cd22f0fa39f3446b7aa31a72170f160e1a905;p=postgresql In pg_upgrade, document why we can't issue \n\n in the command logfile on Windows. Slightly cleanup log output on Windows given this restriction. Backpatch to 9.2. --- diff --git a/contrib/pg_upgrade/exec.c b/contrib/pg_upgrade/exec.c index ac46a9b936..99f500645e 100644 --- a/contrib/pg_upgrade/exec.c +++ b/contrib/pg_upgrade/exec.c @@ -63,8 +63,11 @@ exec_prog(const char *log_file, const char *opt_log_file, if (written >= MAXCMDLEN) pg_log(PG_FATAL, "command too long\n"); - if ((log = fopen_priv(log_file, "a+")) == NULL) + if ((log = fopen_priv(log_file, "a")) == NULL) pg_log(PG_FATAL, "cannot write to log file %s\n", log_file); +#ifdef WIN32 + fprintf(log, "\n\n"); +#endif pg_log(PG_VERBOSE, "%s\n", cmd); fprintf(log, "command: %s\n", cmd); @@ -97,10 +100,13 @@ exec_prog(const char *log_file, const char *opt_log_file, #ifndef WIN32 /* - * Can't do this on Windows, postmaster will still hold the log file - * open if the command was "pg_ctl start". + * We can't do this on Windows because it will keep the "pg_ctl start" + * output filename open until the server stops, so we do the \n\n above + * on that platform. We use a unique filename for "pg_ctl start" that is + * never reused while the server is running, so it works fine. We could + * log these commands to a third file, but that just adds complexity. */ - if ((log = fopen_priv(log_file, "a+")) == NULL) + if ((log = fopen_priv(log_file, "a")) == NULL) pg_log(PG_FATAL, "cannot write to log file %s\n", log_file); fprintf(log, "\n\n"); fclose(log); diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h index 195b927cf5..305834375f 100644 --- a/contrib/pg_upgrade/pg_upgrade.h +++ b/contrib/pg_upgrade/pg_upgrade.h @@ -63,7 +63,11 @@ extern char *output_files[]; #define SERVER_STOP_LOG_FILE SERVER_LOG_FILE #else #define SERVER_START_LOG_FILE "pg_upgrade_server_start.log" -/* pg_ctl stop doesn't keep the log file open, so reuse UTILITY_LOG_FILE */ +/* + * "pg_ctl start" keeps SERVER_START_LOG_FILE and SERVER_LOG_FILE open + * while the server is running, so we use UTILITY_LOG_FILE for "pg_ctl + * stop". + */ #define SERVER_STOP_LOG_FILE UTILITY_LOG_FILE #endif