pg_upgrade: pass username to analyze script
authorBruce Momjian <bruce@momjian.us>
Fri, 28 Jun 2013 23:11:51 +0000 (19:11 -0400)
committerBruce Momjian <bruce@momjian.us>
Fri, 28 Jun 2013 23:11:51 +0000 (19:11 -0400)
If -U (user) is specified, pass the username into the created analyze
script.
Per request from Ray Stell

contrib/pg_upgrade/check.c
contrib/pg_upgrade/option.c
contrib/pg_upgrade/pg_upgrade.h

index 1f67e602defd362d3a8e66ab6b987d71f3df43ec..0376fcbefc18446d789f1424b21998d8a40bc58b 100644 (file)
@@ -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();
 }
 
index dee58ee28fc48f4af5c1d54245927ac7cc48ed47..2774b1e21144da1a965305bcec8f66fd83a023d7 100644 (file)
@@ -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
index 0d44f4e4477cf5bd2b95508d041e0b8924cda876..0b3ad200786aac01bd7fef4ffa8985b3c22401cd 100644 (file)
@@ -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 */