mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03: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:
		@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user