I have been wrestling for a couple of days trying to get pg_upgrade testing working on Windows, with a view to having it tested on the buildfarm. The test script has its own issues, which I'll deal with separately, but there are two issues in pg_upgrade's exec.c that make me suspect that if pg_upgrade has ever worked at all on Windows it is a matter of sheer luck. The attached patch fixes these. The first issue is a plain miscall to stlcpy(), where the length argument is wrong. The second is where exec_prog tries to open a log file after the system call returns. This will fail if the command was a 'pg_ctl start', as the running postmaster will have the log file open, so I have simply #ifdef'd it out for the Windows case, as the code does nothing except add a couple of line feeds to the log, missing which won't affect anything much.
Barring objection I will commit this before long. cheers andrew
diff --git a/contrib/pg_upgrade/exec.c b/contrib/pg_upgrade/exec.c index c75d9db..c780b63 100644 --- a/contrib/pg_upgrade/exec.c +++ b/contrib/pg_upgrade/exec.c @@ -52,7 +52,7 @@ exec_prog(const char *log_file, const char *opt_log_file, old_umask = umask(S_IRWXG | S_IRWXO); - written = strlcpy(cmd, SYSTEMQUOTE, strlen(SYSTEMQUOTE)); + written = strlcpy(cmd, SYSTEMQUOTE, sizeof(cmd)); va_start(ap, fmt); written += vsnprintf(cmd + written, MAXCMDLEN - written, fmt, ap); va_end(ap); @@ -95,10 +95,12 @@ exec_prog(const char *log_file, const char *opt_log_file, log_file); } +#ifndef WIN32 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); +#endif return result == 0; }
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers