]> granicus.if.org Git - postgresql/commitdiff
Implement dry-run mode for pg_archivecleanup
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 1 Feb 2012 16:56:59 +0000 (13:56 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 1 Feb 2012 17:18:12 +0000 (14:18 -0300)
In dry-run mode, just the name of the file to be removed is printed to
stdout; this is so the user can easily plug it into another program
through a pipe.  If debug mode is also specified, a more verbose message
is printed to stderr.

Author: Gabriele Bartolini
Reviewer: Josh Kupershmidt

contrib/pg_archivecleanup/pg_archivecleanup.c
doc/src/sgml/pgarchivecleanup.sgml

index 400968ce399c82c318b3ff78c5c47991c8c0c3d1..adfc83dea70eca52beebcd73e53f061161a1b300 100644 (file)
@@ -36,6 +36,7 @@ const char *progname;
 
 /* Options and defaults */
 bool           debug = false;          /* are we debugging? */
+bool           dryrun = false;         /* are we performing a dry-run operation? */
 
 char      *archiveLocation;    /* where to find the archive? */
 char      *restartWALFileName; /* the file from which we can restart restore */
@@ -119,6 +120,22 @@ CleanupPriorWALFiles(void)
                        {
                                snprintf(WALFilePath, MAXPGPATH, "%s/%s",
                                                 archiveLocation, xlde->d_name);
+
+                               if (dryrun)
+                               {
+                                       /*
+                                        * Prints the name of the file to be removed and skips the
+                                        * actual removal.  The regular printout is so that the
+                                        * user can pipe the output into some other program.
+                                        */
+                                       printf("%s\n", WALFilePath);
+                                       if (debug)
+                                               fprintf(stderr,
+                                                               "%s: file \"%s\" would be removed\n",
+                                                               progname, WALFilePath);
+                                       continue;
+                               }
+
                                if (debug)
                                        fprintf(stderr, "%s: removing file \"%s\"\n",
                                                        progname, WALFilePath);
@@ -205,6 +222,7 @@ usage(void)
        printf("  %s [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE\n", progname);
        printf("\nOptions:\n");
        printf("  -d                 generates debug output (verbose mode)\n");
+       printf("  -n                 shows the names of the files that would have been removed (dry-run)\n");
        printf("  --help             show this help, then exit\n");
        printf("  --version          output version information, then exit\n");
        printf("\n"
@@ -241,13 +259,16 @@ main(int argc, char **argv)
                }
        }
 
-       while ((c = getopt(argc, argv, "d")) != -1)
+       while ((c = getopt(argc, argv, "dn")) != -1)
        {
                switch (c)
                {
                        case 'd':                       /* Debug mode */
                                debug = true;
                                break;
+                       case 'n':                       /* Dry-Run mode */
+                               dryrun = true;
+                               break;
                        default:
                                fprintf(stderr, "Try \"%s --help\" for more information.\n", progname);
                                exit(2);
index ddffa321f6368cf52df31bbbe0c5904639a1c10c..8148c53d3a0a591f8912fa0a2180a4df4bc0333d 100644 (file)
@@ -98,6 +98,15 @@ pg_archivecleanup:  removing file "archive/00000001000000370000000E"
       </listitem>
      </varlistentry>
 
+     <varlistentry>
+      <term><option>-n</option></term>
+      <listitem>
+       <para>
+        Print the names of the files that would have been removed on <filename>stdout</> (performs a dry run).
+       </para>
+      </listitem>
+     </varlistentry>
+
     </variablelist>
    </para>