]> granicus.if.org Git - postgresql/commitdiff
dummy commit
authorBruce Momjian <bruce@momjian.us>
Fri, 30 Nov 2012 22:51:53 +0000 (17:51 -0500)
committerBruce Momjian <bruce@momjian.us>
Tue, 4 Dec 2012 03:45:02 +0000 (22:45 -0500)
contrib/pg_upgrade/pg_upgrade.c
contrib/pg_upgrade/server.c
doc/src/sgml/ref/initdb.sgml
src/bin/initdb/initdb.c

index c12f15b875bc7dad49ab6e2baa30f57f1b0e1c58..63df52996d5bd5c723cd1abd84a9df8d414e4e1b 100644 (file)
@@ -150,6 +150,12 @@ main(int argc, char **argv)
                          new_cluster.pgdata);
        check_ok();
 
+       prep_status("Sync data directory to disk");
+       exec_prog(UTILITY_LOG_FILE, NULL, true,
+                         "\"%s/initdb\" --sync-only \"%s\"", new_cluster.bindir,
+                         new_cluster.pgdata);
+       check_ok();
+
        create_script_for_cluster_analyze(&analyze_script_file_name);
        create_script_for_old_cluster_deletion(&deletion_script_file_name);
 
index 49d4c8f9d739791fb0d9bdbe2ee35dec7dc3ec5b..05d8cc0b12383a949f28726b13094ba06e95b308 100644 (file)
@@ -209,9 +209,9 @@ start_postmaster(ClusterInfo *cluster)
         * a gap of 2000000000 from the current xid counter, so autovacuum will
         * not touch them.
         *
-        *      synchronous_commit=off improves object creation speed, and we only
-        *      modify the new cluster, so only use it there.  If there is a crash,
-        *      the new cluster has to be recreated anyway.
+        * Turn off durability requirements to improve object creation speed, and
+        * we only modify the new cluster, so only use it there.  If there is a
+        * crash, the new cluster has to be recreated anyway.
         */
        snprintf(cmd, sizeof(cmd),
                         "\"%s/pg_ctl\" -w -l \"%s\" -D \"%s\" -o \"-p %d%s%s%s%s\" start",
@@ -219,7 +219,8 @@ start_postmaster(ClusterInfo *cluster)
                         (cluster->controldata.cat_ver >=
                          BINARY_UPGRADE_SERVER_FLAG_CAT_VER) ? " -b" :
                         " -c autovacuum=off -c autovacuum_freeze_max_age=2000000000",
-                        (cluster == &new_cluster) ? " -c synchronous_commit=off" : "",
+                        (cluster == &new_cluster) ?
+                               " -c synchronous_commit=off -c fsync=off -c full_page_writes=off" : "",
                         cluster->pgopts ? cluster->pgopts : "", socket_string);
 
        /*
index 08ee37e7d8650f209572de6668b1a83231513fc3..a1e46eb4c6766df85f9e9d1b9743cdab9caf3183 100644 (file)
@@ -244,6 +244,17 @@ PostgreSQL documentation
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>-S</option></term>
+      <term><option>--sync-only</option></term>
+      <listitem>
+       <para>
+        Safely write all database files to disk and exit.  This does not
+        perform any of the normal <application>initdb</> operations.
+       </para>
+      </listitem>
+     </varlistentry>
+
      <varlistentry>
       <term><option>-T <replaceable>CFG</></option></term>
       <term><option>--text-search-config=<replaceable>CFG</></option></term>
index 402504b25783a787ea6de9775c0b6a53efea3c45..8c0a9f41abf67f54ab0180f87481db5066dbe6db 100644 (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);