diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml index afd344b4c0..3077530c7b 100644 --- a/doc/src/sgml/ref/initdb.sgml +++ b/doc/src/sgml/ref/initdb.sgml @@ -388,6 +388,17 @@ PostgreSQL documentation Other, less commonly used, options are also available: + + + + + Run the bootstrap backend with the + debug_invalidate_system_caches_always=1 option. + This takes a very long time and is only of use for deep debugging. + + + + diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 152d21e88b..0945d70061 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -202,6 +202,9 @@ static bool authwarning = false; static const char *boot_options = "-F"; static const char *backend_options = "--single -F -O -j -c search_path=pg_catalog -c exit_on_error=true"; +/* Additional switches to pass to backend (either boot or standalone) */ +static char *extra_options = ""; + static const char *const subdirs[] = { "global", "pg_wal/archive_status", @@ -962,12 +965,12 @@ test_config_settings(void) test_buffs = MIN_BUFS_FOR_CONNS(test_conns); snprintf(cmd, sizeof(cmd), - "\"%s\" --boot -x0 %s " + "\"%s\" --boot -x0 %s %s " "-c max_connections=%d " "-c shared_buffers=%d " "-c dynamic_shared_memory_type=%s " "< \"%s\" > \"%s\" 2>&1", - backend_exec, boot_options, + backend_exec, boot_options, extra_options, test_conns, test_buffs, dynamic_shared_memory_type, DEVNULL, DEVNULL); @@ -998,12 +1001,12 @@ test_config_settings(void) } snprintf(cmd, sizeof(cmd), - "\"%s\" --boot -x0 %s " + "\"%s\" --boot -x0 %s %s " "-c max_connections=%d " "-c shared_buffers=%d " "-c dynamic_shared_memory_type=%s " "< \"%s\" > \"%s\" 2>&1", - backend_exec, boot_options, + backend_exec, boot_options, extra_options, n_connections, test_buffs, dynamic_shared_memory_type, DEVNULL, DEVNULL); @@ -1403,11 +1406,11 @@ bootstrap_template1(void) unsetenv("PGCLIENTENCODING"); snprintf(cmd, sizeof(cmd), - "\"%s\" --boot -x1 -X %u %s %s %s", + "\"%s\" --boot -x1 -X %u %s %s %s %s", backend_exec, wal_segment_size_mb * (1024 * 1024), data_checksums ? "-k" : "", - boot_options, + boot_options, extra_options, debug ? "-d 5" : ""); @@ -2263,6 +2266,7 @@ usage(const char *progname) printf(_(" -X, --waldir=WALDIR location for the write-ahead log directory\n")); printf(_(" --wal-segsize=SIZE size of WAL segments, in megabytes\n")); printf(_("\nLess commonly used options:\n")); + printf(_(" --clobber-cache use cache-clobbering debug option\n")); printf(_(" -d, --debug generate lots of debugging output\n")); printf(_(" -L DIRECTORY where to find the input files\n")); printf(_(" -n, --no-clean do not clean up after errors\n")); @@ -2863,8 +2867,8 @@ initialize_data_directory(void) fflush(stdout); snprintf(cmd, sizeof(cmd), - "\"%s\" %s template1 >%s", - backend_exec, backend_options, + "\"%s\" %s %s template1 >%s", + backend_exec, backend_options, extra_options, DEVNULL); PG_CMD_OPEN; @@ -2943,6 +2947,7 @@ main(int argc, char *argv[]) {"wal-segsize", required_argument, NULL, 12}, {"data-checksums", no_argument, NULL, 'k'}, {"allow-group-access", no_argument, NULL, 'g'}, + {"clobber-cache", no_argument, NULL, 14}, {NULL, 0, NULL, 0} }; @@ -3084,6 +3089,11 @@ main(int argc, char *argv[]) case 'g': SetDataDirectoryCreatePerm(PG_DIR_MODE_GROUP); break; + case 14: + extra_options = psprintf("%s %s", + extra_options, + "-c debug_invalidate_system_caches_always=1"); + break; default: /* getopt_long already emitted a complaint */ fprintf(stderr, _("Try \"%s --help\" for more information.\n"),