mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-30 19:00:29 +08:00
Fix pg_upgrade's use of pg_ctl on Win32 to not send command and sever
output to the same file, because it is impossible. Also set user name for pg_dumpall in pg_upgrade.
This commit is contained in:
parent
7b6f29006e
commit
601d1eeddc
@ -19,9 +19,9 @@ generate_old_dump(migratorContext *ctx)
|
||||
* restores the frozenid's for databases and relations.
|
||||
*/
|
||||
exec_prog(ctx, true,
|
||||
SYSTEMQUOTE "\"%s/pg_dumpall\" --port %d --schema-only "
|
||||
"--binary-upgrade > \"%s/" ALL_DUMP_FILE "\"" SYSTEMQUOTE,
|
||||
ctx->new.bindir, ctx->old.port, ctx->cwd);
|
||||
SYSTEMQUOTE "\"%s/pg_dumpall\" --port %d --username \"%s\" "
|
||||
"--schema-only --binary-upgrade > \"%s/" ALL_DUMP_FILE "\""
|
||||
SYSTEMQUOTE, ctx->new.bindir, ctx->old.port, ctx->user, ctx->cwd);
|
||||
check_ok(ctx);
|
||||
}
|
||||
|
||||
|
@ -174,12 +174,10 @@ parseCommandLine(migratorContext *ctx, int argc, char *argv[])
|
||||
* start.
|
||||
*/
|
||||
/* truncate */
|
||||
ctx->log_fd = fopen(ctx->logfile, "w");
|
||||
if (!ctx->log_fd)
|
||||
if ((ctx->log_fd = fopen(ctx->logfile, "w")) == NULL)
|
||||
pg_log(ctx, PG_FATAL, "Cannot write to log file %s\n", ctx->logfile);
|
||||
fclose(ctx->log_fd);
|
||||
ctx->log_fd = fopen(ctx->logfile, "a");
|
||||
if (!ctx->log_fd)
|
||||
if ((ctx->log_fd = fopen(ctx->logfile, "a")) == NULL)
|
||||
pg_log(ctx, PG_FATAL, "Cannot write to log file %s\n", ctx->logfile);
|
||||
}
|
||||
else
|
||||
|
@ -48,7 +48,7 @@
|
||||
#define pg_link_file win32_pghardlink
|
||||
#define EXE_EXT ".exe"
|
||||
#define sleep(x) Sleep(x * 1000)
|
||||
#define DEVNULL "nul"
|
||||
#define DEVNULL "nul"
|
||||
/* "con" does not work from the Msys 1.0.10 console (part of MinGW). */
|
||||
#define DEVTTY "con"
|
||||
/* from pgport */
|
||||
|
@ -177,12 +177,22 @@ start_postmaster(migratorContext *ctx, Cluster whichCluster, bool quiet)
|
||||
port = ctx->new.port;
|
||||
}
|
||||
|
||||
/* use -l for Win32 */
|
||||
/*
|
||||
* On Win32, we can't send both server output and pg_ctl output
|
||||
* to the same file because we get the error:
|
||||
* "The process cannot access the file because it is being used by another process."
|
||||
* so we have to send pg_ctl output to 'nul'.
|
||||
*/
|
||||
snprintf(cmd, sizeof(cmd),
|
||||
SYSTEMQUOTE "\"%s/pg_ctl\" -l \"%s\" -D \"%s\" "
|
||||
"-o \"-p %d -c autovacuum=off -c autovacuum_freeze_max_age=2000000000\" "
|
||||
"start >> \"%s\" 2>&1" SYSTEMQUOTE,
|
||||
bindir, ctx->logfile, datadir, port, ctx->logfile);
|
||||
bindir, ctx->logfile, datadir, port,
|
||||
#ifndef WIN32
|
||||
ctx->logfile);
|
||||
#else
|
||||
DEVNULL);
|
||||
#endif
|
||||
exec_prog(ctx, true, "%s", cmd);
|
||||
|
||||
/* wait for the server to start properly */
|
||||
@ -200,6 +210,7 @@ start_postmaster(migratorContext *ctx, Cluster whichCluster, bool quiet)
|
||||
void
|
||||
stop_postmaster(migratorContext *ctx, bool fast, bool quiet)
|
||||
{
|
||||
char cmd[MAXPGPATH];
|
||||
const char *bindir;
|
||||
const char *datadir;
|
||||
|
||||
@ -216,10 +227,16 @@ stop_postmaster(migratorContext *ctx, bool fast, bool quiet)
|
||||
else
|
||||
return; /* no cluster running */
|
||||
|
||||
/* use -l for Win32 */
|
||||
exec_prog(ctx, fast ? false : true,
|
||||
/* See comment in start_postmaster() about why win32 output is ignored. */
|
||||
snprintf(cmd, sizeof(cmd),
|
||||
SYSTEMQUOTE "\"%s/pg_ctl\" -l \"%s\" -D \"%s\" %s stop >> \"%s\" 2>&1" SYSTEMQUOTE,
|
||||
bindir, ctx->logfile, datadir, fast ? "-m fast" : "", ctx->logfile);
|
||||
bindir, ctx->logfile, datadir, fast ? "-m fast" : "",
|
||||
#ifndef WIN32
|
||||
ctx->logfile);
|
||||
#else
|
||||
DEVNULL);
|
||||
#endif
|
||||
exec_prog(ctx, fast ? false : true, "%s", cmd);
|
||||
|
||||
ctx->postmasterPID = 0;
|
||||
ctx->running_cluster = NONE;
|
||||
|
Loading…
Reference in New Issue
Block a user