pg_basebackup: Skip only the *contents* of pg_replslot.
authorRobert Haas <rhaas@postgresql.org>
Tue, 25 Feb 2014 16:23:45 +0000 (11:23 -0500)
committerRobert Haas <rhaas@postgresql.org>
Tue, 25 Feb 2014 16:23:45 +0000 (11:23 -0500)
Include the directory itself.

Fujii Masao

src/backend/replication/basebackup.c

index 06e54bc530e2e6133c3b0008cd9c71b1fedd5470..2bbe384e351891fceda1cab90189e09c55c56ee1 100644 (file)
@@ -862,10 +862,6 @@ sendDir(char *path, int basepathlen, bool sizeonly, List *tablespaces)
                if (strcmp(de->d_name, BACKUP_LABEL_FILE) == 0)
                        continue;
 
-               /* Skip pg_replslot, not useful to copy */
-               if (strcmp(de->d_name, "pg_replslot") == 0)
-                       continue;
-
                /*
                 * Check if the postmaster has signaled us to exit, and abort with an
                 * error in that case. The error handler further up will call
@@ -920,6 +916,18 @@ sendDir(char *path, int basepathlen, bool sizeonly, List *tablespaces)
                        continue;
                }
 
+               /*
+                * Skip pg_replslot, not useful to copy. But include it as an empty
+                * directory anyway, so we get permissions right.
+                */
+               if (strcmp(de->d_name, "pg_replslot") == 0)
+               {
+                       if (!sizeonly)
+                               _tarWriteHeader(pathbuf + basepathlen + 1, NULL, &statbuf);
+                       size += 512;            /* Size of the header just added */
+                       continue;
+               }
+
                /*
                 * We can skip pg_xlog, the WAL segments need to be fetched from the
                 * WAL archive anyway. But include it as an empty directory anyway, so