From f85136106d87f54e87635736dfe1b8227b6803ad Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Fri, 28 Jun 2013 19:11:51 -0400 Subject: [PATCH] pg_upgrade: pass username to analyze script If -U (user) is specified, pass the username into the created analyze script. Per request from Ray Stell --- contrib/pg_upgrade/check.c | 22 ++++++++++++++++++---- contrib/pg_upgrade/option.c | 1 + contrib/pg_upgrade/pg_upgrade.h | 1 + 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c index 1f67e602def..0376fcbefc1 100644 --- a/contrib/pg_upgrade/check.c +++ b/contrib/pg_upgrade/check.c @@ -459,6 +459,13 @@ void 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); @@ -501,7 +508,8 @@ create_script_for_cluster_analyze(char **analyze_script_file_name) 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, + 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); @@ -522,7 +530,8 @@ create_script_for_cluster_analyze(char **analyze_script_file_name) 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, "\"%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); @@ -543,7 +552,8 @@ create_script_for_cluster_analyze(char **analyze_script_file_name) 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, "\"%s/vacuumdb\" %s--all --analyze-only\n", + new_cluster.bindir, user_specification); fprintf(script, "echo%s\n\n", ECHO_BLANK); #ifndef WIN32 @@ -556,7 +566,8 @@ create_script_for_cluster_analyze(char **analyze_script_file_name) ECHO_QUOTE, ECHO_QUOTE); fprintf(script, "echo %s-------------------------------------------------------------%s\n", ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "\"%s/vacuumdb\" --all %s\n", new_cluster.bindir, + 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"); @@ -573,6 +584,9 @@ create_script_for_cluster_analyze(char **analyze_script_file_name) *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 index dee58ee28fc..2774b1e2114 100644 --- a/contrib/pg_upgrade/option.c +++ b/contrib/pg_upgrade/option.c @@ -172,6 +172,7 @@ parseCommandLine(int argc, char *argv[]) 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 index 0d44f4e4477..0b3ad200786 100644 --- a/contrib/pg_upgrade/pg_upgrade.h +++ b/contrib/pg_upgrade/pg_upgrade.h @@ -291,6 +291,7 @@ typedef struct 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 */ -- GitLab