For a long time now, pg_upgrade drops a script (analyze_new_cluster.sh) that just calls vacuumdb to run the analyze in stages. This script made a lot of sense back when it actually implemented the stages, but these days since it's just calling a single command, I think it's just unnecessary complication.
I suggest we drop it and just replace it with instructions to call vacuumdb directly. Attached patch does this. It also removes the support in the instructions that talk about pre-8.4 databases, which I believe is dead code per https://postgr.es/m/CABUevEx-D0PNVe00tkeQRGennZQwDtBJn= 493mjt-x6sppb...@mail.gmail.com. -- Magnus Hagander Me: https://www.hagander.net/ <http://www.hagander.net/> Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/>
diff --git a/src/bin/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore index 9edea5c98f..2d3bfeaa50 100644 --- a/src/bin/pg_upgrade/.gitignore +++ b/src/bin/pg_upgrade/.gitignore @@ -1,9 +1,7 @@ /pg_upgrade # Generated by test suite /pg_upgrade_internal.log -/analyze_new_cluster.sh /delete_old_cluster.sh -/analyze_new_cluster.bat /delete_old_cluster.bat /reindex_hash.sql /loadable_libraries.txt diff --git a/src/bin/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile index 0360c37bf9..44d06be5a6 100644 --- a/src/bin/pg_upgrade/Makefile +++ b/src/bin/pg_upgrade/Makefile @@ -44,7 +44,7 @@ uninstall: clean distclean maintainer-clean: rm -f pg_upgrade$(X) $(OBJS) - rm -rf analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \ + rm -rf delete_old_cluster.sh log/ tmp_check/ \ loadable_libraries.txt reindex_hash.sql \ pg_upgrade_dump_globals.sql \ pg_upgrade_dump_*.custom pg_upgrade_*.log diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index 2f7aa632c5..8538b076aa 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -231,21 +231,22 @@ issue_warnings_and_set_wal_level(void) void -output_completion_banner(char *analyze_script_file_name, - char *deletion_script_file_name) +output_completion_banner(char *deletion_script_file_name) { - /* Did we copy the free space files? */ - if (GET_MAJOR_VERSION(old_cluster.major_version) >= 804) - pg_log(PG_REPORT, - "Optimizer statistics are not transferred by pg_upgrade so,\n" - "once you start the new server, consider running:\n" - " %s\n\n", analyze_script_file_name); - else - pg_log(PG_REPORT, - "Optimizer statistics and free space information are not transferred\n" - "by pg_upgrade so, once you start the new server, consider running:\n" - " %s\n\n", analyze_script_file_name); + PQExpBufferData user_specification; + + initPQExpBuffer(&user_specification); + if (os_info.user_specified) + { + appendPQExpBufferStr(&user_specification, "-U "); + appendShellString(&user_specification, os_info.user); + appendPQExpBufferChar(&user_specification, ' '); + } + pg_log(PG_REPORT, + "Optimizer statistics are not transferred by pg_upgrade so,\n" + "once you start the new server, consider running:\n" + " %s/vacuumdb %s--all --analyze-in-stages\n\n", new_cluster.bindir, user_specification.data); if (deletion_script_file_name) pg_log(PG_REPORT, @@ -258,6 +259,8 @@ output_completion_banner(char *analyze_script_file_name, "because user-defined tablespaces or the new cluster's data directory\n" "exist in the old cluster directory. The old cluster's contents must\n" "be deleted manually.\n"); + + termPQExpBuffer(&user_specification); } @@ -452,96 +455,6 @@ check_databases_are_compatible(void) } -/* - * create_script_for_cluster_analyze() - * - * This incrementally generates better optimizer statistics - */ -void -create_script_for_cluster_analyze(char **analyze_script_file_name) -{ - FILE *script = NULL; - PQExpBufferData user_specification; - - prep_status("Creating script to analyze new cluster"); - - initPQExpBuffer(&user_specification); - if (os_info.user_specified) - { - appendPQExpBufferStr(&user_specification, "-U "); - appendShellString(&user_specification, os_info.user); - appendPQExpBufferChar(&user_specification, ' '); - } - - *analyze_script_file_name = psprintf("%sanalyze_new_cluster.%s", - SCRIPT_PREFIX, SCRIPT_EXT); - - if ((script = fopen_priv(*analyze_script_file_name, "w")) == NULL) - pg_fatal("could not open file \"%s\": %s\n", - *analyze_script_file_name, strerror(errno)); - -#ifndef WIN32 - /* add shebang header */ - fprintf(script, "#!/bin/sh\n\n"); -#else - /* suppress command echoing */ - fprintf(script, "@echo off\n"); -#endif - - fprintf(script, "echo %sThis script will generate minimal optimizer statistics rapidly%s\n", - ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "echo %sso your system is usable, and then gather statistics twice more%s\n", - ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "echo %swith increasing accuracy. When it is done, your system will%s\n", - ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "echo %shave the default level of optimizer statistics.%s\n", - ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "echo%s\n\n", ECHO_BLANK); - - fprintf(script, "echo %sIf you have used ALTER TABLE to modify the statistics target for%s\n", - ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "echo %sany tables, you might want to remove them and restore them after%s\n", - ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "echo %srunning this script because they will delay fast statistics generation.%s\n", - ECHO_QUOTE, ECHO_QUOTE); - fprintf(script, "echo%s\n\n", ECHO_BLANK); - - fprintf(script, "echo %sIf you would like default statistics as quickly as possible, cancel%s\n", - 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.data, - /* Did we copy the free space files? */ - (GET_MAJOR_VERSION(old_cluster.major_version) >= 804) ? - "--analyze-only" : "--analyze", ECHO_QUOTE); - fprintf(script, "echo%s\n\n", ECHO_BLANK); - - fprintf(script, "\"%s/vacuumdb\" %s--all --analyze-in-stages\n", - new_cluster.bindir, user_specification.data); - /* Did we copy the free space files? */ - if (GET_MAJOR_VERSION(old_cluster.major_version) < 804) - fprintf(script, "\"%s/vacuumdb\" %s--all\n", new_cluster.bindir, - user_specification.data); - - fprintf(script, "echo%s\n\n", ECHO_BLANK); - fprintf(script, "echo %sDone%s\n", - ECHO_QUOTE, ECHO_QUOTE); - - fclose(script); - -#ifndef WIN32 - if (chmod(*analyze_script_file_name, S_IRWXU) != 0) - pg_fatal("could not add execute permission to file \"%s\": %s\n", - *analyze_script_file_name, strerror(errno)); -#endif - - termPQExpBuffer(&user_specification); - - check_ok(); -} - - /* * create_script_for_old_cluster_deletion() * diff --git a/src/bin/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c index 70194eb096..cee26fbc96 100644 --- a/src/bin/pg_upgrade/pg_upgrade.c +++ b/src/bin/pg_upgrade/pg_upgrade.c @@ -75,7 +75,6 @@ char *output_files[] = { int main(int argc, char **argv) { - char *analyze_script_file_name = NULL; char *deletion_script_file_name = NULL; bool live_check = false; @@ -176,7 +175,6 @@ main(int argc, char **argv) new_cluster.pgdata); check_ok(); - create_script_for_cluster_analyze(&analyze_script_file_name); create_script_for_old_cluster_deletion(&deletion_script_file_name); issue_warnings_and_set_wal_level(); @@ -186,10 +184,8 @@ main(int argc, char **argv) "Upgrade Complete\n" "----------------\n"); - output_completion_banner(analyze_script_file_name, - deletion_script_file_name); + output_completion_banner(deletion_script_file_name); - pg_free(analyze_script_file_name); pg_free(deletion_script_file_name); cleanup(); diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h index 8b90cefbe0..9df66f8358 100644 --- a/src/bin/pg_upgrade/pg_upgrade.h +++ b/src/bin/pg_upgrade/pg_upgrade.h @@ -333,12 +333,10 @@ void check_and_dump_old_cluster(bool live_check); void check_new_cluster(void); void report_clusters_compatible(void); void issue_warnings_and_set_wal_level(void); -void output_completion_banner(char *analyze_script_file_name, - char *deletion_script_file_name); +void output_completion_banner(char *deletion_script_file_name); void check_cluster_versions(void); void check_cluster_compatibility(bool live_check); void create_script_for_old_cluster_deletion(char **deletion_script_file_name); -void create_script_for_cluster_analyze(char **analyze_script_file_name); /* controldata.c */ diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index 7ff06de6d1..551ac8a5c2 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -243,13 +243,7 @@ esac pg_ctl start -l "$logdir/postmaster2.log" -o "$POSTMASTER_OPTS" -w -# In the commands below we inhibit msys2 from converting the "/c" switch -# in "cmd /c" to a file system path. - -case $testhost in - MINGW*) MSYS2_ARG_CONV_EXCL=/c cmd /c analyze_new_cluster.bat ;; - *) sh ./analyze_new_cluster.sh ;; -esac +vacuumdb --all --analyze-in-stages pg_dumpall --no-sync -f "$temp_root"/dump2.sql || pg_dumpall2_status=$? pg_ctl -m fast stop