On Thu, May 30, 2013 at 08:42:21AM -0400, Ray Stell wrote:
>
> On May 29, 2013, at 11:07 AM, Bruce Momjian wrote:
>
> > On Wed, May 29, 2013 at 08:59:42AM -0400, Ray Stell wrote:
> >>> [ moved to hacker ] The question is whether hard-wiring these
> >>> helps more than it hurts, and which ones should be hard-wired.
>
> I seems to me that superuser is exactly that special case and that if
> an alternate superuser is hardwired in the src cluster then -u/-U and
> that specific value will be required on both sides of pg_upgrade, no
> variability is needed and perhaps not possible.  You're point is well
> taken for port.

You have convinced me.  The attached, applied patch for PG 9.4 passes
the command-line-supplied username into the created analyze script.

I have also attached a sample output analyze script.

-- 
  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/check.c b/contrib/pg_upgrade/check.c
new file mode 100644
index 1f67e60..0376fcb
*** a/contrib/pg_upgrade/check.c
--- b/contrib/pg_upgrade/check.c
*************** void
*** 459,464 ****
--- 459,471 ----
  create_script_for_cluster_analyze(char **analyze_script_file_name)
  {
  	FILE	   *script = NULL;
+ 	char	   *user_specification = "";
+ 
+ 	if (os_info.user_specified)
+ 	{
+ 		user_specification = pg_malloc(strlen(os_info.user) + 7);
+ 		sprintf(user_specification, "-U \"%s\" ", os_info.user);
+ 	}
  
  	*analyze_script_file_name = pg_malloc(MAXPGPATH);
  
*************** create_script_for_cluster_analyze(char *
*** 501,507 ****
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %sthis script and run:%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "echo %s    \"%s/vacuumdb\" --all %s%s\n", ECHO_QUOTE, new_cluster.bindir,
  	/* Did we copy the free space files? */
  			(GET_MAJOR_VERSION(old_cluster.major_version) >= 804) ?
  			"--analyze-only" : "--analyze", ECHO_QUOTE);
--- 508,515 ----
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %sthis script and run:%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "echo %s    \"%s/vacuumdb\" %s--all %s%s\n", ECHO_QUOTE,
! 			new_cluster.bindir, user_specification,
  	/* Did we copy the free space files? */
  			(GET_MAJOR_VERSION(old_cluster.major_version) >= 804) ?
  			"--analyze-only" : "--analyze", ECHO_QUOTE);
*************** create_script_for_cluster_analyze(char *
*** 522,528 ****
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %s--------------------------------------------------%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "\"%s/vacuumdb\" --all --analyze-only\n", new_cluster.bindir);
  	fprintf(script, "echo%s\n", ECHO_BLANK);
  	fprintf(script, "echo %sThe server is now available with minimal optimizer statistics.%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
--- 530,537 ----
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %s--------------------------------------------------%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "\"%s/vacuumdb\" %s--all --analyze-only\n",
! 			new_cluster.bindir, user_specification);
  	fprintf(script, "echo%s\n", ECHO_BLANK);
  	fprintf(script, "echo %sThe server is now available with minimal optimizer statistics.%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
*************** create_script_for_cluster_analyze(char *
*** 543,549 ****
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %s---------------------------------------------------%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "\"%s/vacuumdb\" --all --analyze-only\n", new_cluster.bindir);
  	fprintf(script, "echo%s\n\n", ECHO_BLANK);
  
  #ifndef WIN32
--- 552,559 ----
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %s---------------------------------------------------%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "\"%s/vacuumdb\" %s--all --analyze-only\n",
! 			new_cluster.bindir, user_specification);
  	fprintf(script, "echo%s\n\n", ECHO_BLANK);
  
  #ifndef WIN32
*************** create_script_for_cluster_analyze(char *
*** 556,562 ****
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %s-------------------------------------------------------------%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "\"%s/vacuumdb\" --all %s\n", new_cluster.bindir,
  	/* Did we copy the free space files? */
  			(GET_MAJOR_VERSION(old_cluster.major_version) >= 804) ?
  			"--analyze-only" : "--analyze");
--- 566,573 ----
  			ECHO_QUOTE, ECHO_QUOTE);
  	fprintf(script, "echo %s-------------------------------------------------------------%s\n",
  			ECHO_QUOTE, ECHO_QUOTE);
! 	fprintf(script, "\"%s/vacuumdb\" %s--all %s\n", new_cluster.bindir,
! 			user_specification,
  	/* Did we copy the free space files? */
  			(GET_MAJOR_VERSION(old_cluster.major_version) >= 804) ?
  			"--analyze-only" : "--analyze");
*************** create_script_for_cluster_analyze(char *
*** 573,578 ****
--- 584,592 ----
  			   *analyze_script_file_name, getErrorText(errno));
  #endif
  
+ 	if (os_info.user_specified)
+ 		pg_free(user_specification);
+ 
  	check_ok();
  }
  
diff --git a/contrib/pg_upgrade/option.c b/contrib/pg_upgrade/option.c
new file mode 100644
index dee58ee..2774b1e
*** a/contrib/pg_upgrade/option.c
--- b/contrib/pg_upgrade/option.c
*************** parseCommandLine(int argc, char *argv[])
*** 172,177 ****
--- 172,178 ----
  			case 'U':
  				pg_free(os_info.user);
  				os_info.user = pg_strdup(optarg);
+ 				os_info.user_specified = true;
  
  				/*
  				 * Push the user name into the environment so pre-9.1
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
new file mode 100644
index 0d44f4e..0b3ad20
*** a/contrib/pg_upgrade/pg_upgrade.h
--- b/contrib/pg_upgrade/pg_upgrade.h
*************** typedef struct
*** 291,296 ****
--- 291,297 ----
  	const char *progname;		/* complete pathname for this program */
  	char	   *exec_path;		/* full path to my executable */
  	char	   *user;			/* username for clusters */
+ 	bool		user_specified; /* user specified on command-line */
  	char	  **old_tablespaces;	/* tablespaces */
  	int			num_old_tablespaces;
  	char	  **libraries;		/* loadable libraries */

Attachment: analyze_new_cluster.sh
Description: Bourne shell script

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to