1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-30 11:03:19 +03:00

Add initdb --sync-only option to sync the data directory to durable

storage.

Have pg_upgrade use it, and enable server options fsync=off and
full_page_writes=off.

Document that users turning fsync from off to on should run initdb
--sync-only.

[ Previous commit was incorrectly applied as a git merge. ]
This commit is contained in:
Bruce Momjian
2012-12-03 22:47:59 -05:00
parent 25d1ed04a2
commit 630cd14426
5 changed files with 47 additions and 5 deletions

View File

@ -118,6 +118,7 @@ static const char *authmethodlocal = "";
static bool debug = false;
static bool noclean = false;
static bool do_sync = true;
static bool sync_only = false;
static bool show_setting = false;
static char *xlog_dir = "";
@ -2796,6 +2797,7 @@ usage(const char *progname)
printf(_(" -n, --noclean do not clean up after errors\n"));
printf(_(" -N, --nosync do not wait for changes to be written safely to disk\n"));
printf(_(" -s, --show show internal settings\n"));
printf(_(" -S, --sync-only only sync data directory\n"));
printf(_("\nOther options:\n"));
printf(_(" -V, --version output version information, then exit\n"));
printf(_(" -?, --help show this help, then exit\n"));
@ -3445,6 +3447,7 @@ main(int argc, char *argv[])
{"show", no_argument, NULL, 's'},
{"noclean", no_argument, NULL, 'n'},
{"nosync", no_argument, NULL, 'N'},
{"sync-only", no_argument, NULL, 'S'},
{"xlogdir", required_argument, NULL, 'X'},
{NULL, 0, NULL, 0}
};
@ -3476,7 +3479,7 @@ main(int argc, char *argv[])
/* process command-line options */
while ((c = getopt_long(argc, argv, "dD:E:L:nNU:WA:sT:X:", long_options, &option_index)) != -1)
while ((c = getopt_long(argc, argv, "dD:E:L:nNU:WA:sST:X:", long_options, &option_index)) != -1)
{
switch (c)
{
@ -3522,6 +3525,9 @@ main(int argc, char *argv[])
case 'N':
do_sync = false;
break;
case 'S':
sync_only = true;
break;
case 'L':
share_path = pg_strdup(optarg);
break;
@ -3589,6 +3595,14 @@ main(int argc, char *argv[])
exit(1);
}
/* If we only need to fsync, just to it and exit */
if (sync_only)
{
setup_pgdata();
perform_fsync();
return 0;
}
if (pwprompt && pwfilename)
{
fprintf(stderr, _("%s: password prompt and password file cannot be specified together\n"), progname);