On Fri, May 25, 2012 at 11:48:53AM +1200, Edmund Horner wrote: > It still fails (when run in verbose mode): > > Creating catalog dump > ""c:\ehorner\pgsql\bin/pg_dumpall" --port 50432 --username "ehorner" > --schema-only --binary-upgrade --verbose > "pg_upgrade_dump_all.sql" > 2>> "pg_upgrade_utility.log"" > ok > ""c:\ehorner\pgsql-old\bin/pg_ctl" -w -l "pg_upgrade_server2.log" > -D "c:\ehorner\pgdata-old" -o"" stop >> "pg_upgrade_server2.log" > 2>&1" > The process cannot access the file because it is being used by > another process. > *failure* > There were problems executing """c:\ehorner\pgsql-old\bin/pg_ctl" > -w -l "pg_upgrade_server2.log" -D "c:\ehorner\pgdata-old" -o "" stop > >> "pg_upgrade_server2.log" 2>&1""
Bingo, this is exactly where I expected it to fail. I am attaching a new, applied patch that creates files pg_upgrade_server_start.log and pg_upgrade_server_stop.log to log the pg_ctl start/stop stdout seperately. This should fix the error. Thanks so much for testing. I believe someone will generate a new binary for testing. > I.e. I think pg_ctl wrote the last couple of lines, and then the two > cmd.exe were unable to write anything more since presumably it's still > open. > > So is this the problem you predicted above with pg_ctl stop? Yep, I think we are good now. I never expected this behavior, but it now makes sense. -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + It's impossible for everything to be true. +
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c new file mode 100644 index 7297efd..3df3836 *** a/contrib/pg_upgrade/pg_upgrade.c --- b/contrib/pg_upgrade/pg_upgrade.c *************** OSInfo os_info; *** 58,65 **** char *output_files[] = { SERVER_LOG_FILE, #ifdef WIN32 ! /* file is unique on Win32 */ ! SERVER_LOG_FILE2, #endif RESTORE_LOG_FILE, UTILITY_LOG_FILE, --- 58,65 ---- char *output_files[] = { SERVER_LOG_FILE, #ifdef WIN32 ! SERVER_START_LOG_FILE, ! SERVER_STOP_LOG_FILE, #endif RESTORE_LOG_FILE, UTILITY_LOG_FILE, diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h new file mode 100644 index 0d6269a..5891997 *** a/contrib/pg_upgrade/pg_upgrade.h --- b/contrib/pg_upgrade/pg_upgrade.h *************** extern char *output_files[]; *** 50,57 **** * because it is being used by another process." so send the pg_ctl * command-line output to a new file, rather than into the server log file. * Ideally we could use UTILITY_LOG_FILE for this, but some Windows platforms ! * keep the pg_ctl output file open even after pg_ctl exits, perhaps by the ! * running postmaster. * * We could use the Windows pgwin32_open() flags to allow shared file * writes but is unclear how all other tools would use those flags, so --- 50,57 ---- * because it is being used by another process." so send the pg_ctl * command-line output to a new file, rather than into the server log file. * Ideally we could use UTILITY_LOG_FILE for this, but some Windows platforms ! * keep the pg_ctl output file open by the running postmaster, even after ! * pg_ctl exits. * * We could use the Windows pgwin32_open() flags to allow shared file * writes but is unclear how all other tools would use those flags, so *************** extern char *output_files[]; *** 59,67 **** * the error message appropriately. */ #ifndef WIN32 ! #define SERVER_LOG_FILE2 SERVER_LOG_FILE #else ! #define SERVER_LOG_FILE2 "pg_upgrade_server2.log" #endif --- 59,69 ---- * the error message appropriately. */ #ifndef WIN32 ! #define SERVER_START_LOG_FILE SERVER_LOG_FILE ! #define SERVER_STOP_LOG_FILE SERVER_LOG_FILE #else ! #define SERVER_START_LOG_FILE "pg_upgrade_server_start.log" ! #define SERVER_STOP_LOG_FILE "pg_upgrade_server_stop.log" #endif diff --git a/contrib/pg_upgrade/server.c b/contrib/pg_upgrade/server.c new file mode 100644 index b515e05..f557453 *** a/contrib/pg_upgrade/server.c --- b/contrib/pg_upgrade/server.c *************** start_postmaster(ClusterInfo *cluster) *** 165,171 **** (cluster->controldata.cat_ver >= BINARY_UPGRADE_SERVER_FLAG_CAT_VER) ? "-b" : "-c autovacuum=off -c autovacuum_freeze_max_age=2000000000", ! cluster->pgopts ? cluster->pgopts : "", SERVER_LOG_FILE2); /* * Don't throw an error right away, let connecting throw the error because --- 165,171 ---- (cluster->controldata.cat_ver >= BINARY_UPGRADE_SERVER_FLAG_CAT_VER) ? "-b" : "-c autovacuum=off -c autovacuum_freeze_max_age=2000000000", ! cluster->pgopts ? cluster->pgopts : "", SERVER_START_LOG_FILE); /* * Don't throw an error right away, let connecting throw the error because *************** start_postmaster(ClusterInfo *cluster) *** 173,181 **** */ pg_ctl_return = exec_prog(false, true, /* pass both file names if the differ */ ! (strcmp(SERVER_LOG_FILE, SERVER_LOG_FILE2) == 0) ? SERVER_LOG_FILE : ! SERVER_LOG_FILE " or " SERVER_LOG_FILE2, "%s", cmd); /* Check to see if we can connect to the server; if not, report it. */ --- 173,181 ---- */ pg_ctl_return = exec_prog(false, true, /* pass both file names if the differ */ ! (strcmp(SERVER_LOG_FILE, SERVER_START_LOG_FILE) == 0) ? SERVER_LOG_FILE : ! SERVER_LOG_FILE " or " SERVER_START_LOG_FILE, "%s", cmd); /* Check to see if we can connect to the server; if not, report it. */ *************** stop_postmaster(bool fast) *** 214,226 **** return; /* no cluster running */ snprintf(cmd, sizeof(cmd), ! SYSTEMQUOTE "\"%s/pg_ctl\" -w -l \"%s\" -D \"%s\" -o \"%s\" " "%s stop >> \"%s\" 2>&1" SYSTEMQUOTE, ! cluster->bindir, SERVER_LOG_FILE2, cluster->pgconfig, cluster->pgopts ? cluster->pgopts : "", ! fast ? "-m fast" : "", SERVER_LOG_FILE2); ! exec_prog(fast ? false : true, true, SERVER_LOG_FILE2, "%s", cmd); os_info.running_cluster = NULL; } --- 214,226 ---- return; /* no cluster running */ snprintf(cmd, sizeof(cmd), ! SYSTEMQUOTE "\"%s/pg_ctl\" -w -D \"%s\" -o \"%s\" " "%s stop >> \"%s\" 2>&1" SYSTEMQUOTE, ! cluster->bindir, cluster->pgconfig, cluster->pgopts ? cluster->pgopts : "", ! fast ? "-m fast" : "", SERVER_STOP_LOG_FILE); ! exec_prog(fast ? false : true, true, SERVER_STOP_LOG_FILE, "%s", cmd); os_info.running_cluster = NULL; }
-- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs