mirror of
https://github.com/postgres/postgres.git
synced 2025-04-25 21:42:33 +03:00
Add --xlogdir option to pg_basebackup, for specifying the pg_xlog directory.
Haribabu kommi, slightly modified by me.
This commit is contained in:
parent
551c78281b
commit
d1b88f6b36
@ -202,6 +202,18 @@ PostgreSQL documentation
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>--xlogdir=<replaceable class="parameter">xlogdir</replaceable></option></term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Specifies the location for the transaction log directory.
|
||||||
|
<replaceable>xlogdir</replaceable> must be an absolute path.
|
||||||
|
The transaction log directory can only be specified when
|
||||||
|
the backup is in plain mode.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>-x</option></term>
|
<term><option>-x</option></term>
|
||||||
<term><option>--xlog</option></term>
|
<term><option>--xlog</option></term>
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
/* Global options */
|
/* Global options */
|
||||||
char *basedir = NULL;
|
char *basedir = NULL;
|
||||||
|
static char *xlog_dir = "";
|
||||||
char format = 'p'; /* p(lain)/t(ar) */
|
char format = 'p'; /* p(lain)/t(ar) */
|
||||||
char *label = "pg_basebackup base backup";
|
char *label = "pg_basebackup base backup";
|
||||||
bool showprogress = false;
|
bool showprogress = false;
|
||||||
@ -115,6 +116,7 @@ usage(void)
|
|||||||
printf(_(" -x, --xlog include required WAL files in backup (fetch mode)\n"));
|
printf(_(" -x, --xlog include required WAL files in backup (fetch mode)\n"));
|
||||||
printf(_(" -X, --xlog-method=fetch|stream\n"
|
printf(_(" -X, --xlog-method=fetch|stream\n"
|
||||||
" include required WAL files with specified method\n"));
|
" include required WAL files with specified method\n"));
|
||||||
|
printf(_(" --xlogdir=XLOGDIR location for the transaction log directory\n"));
|
||||||
printf(_(" -z, --gzip compress tar output\n"));
|
printf(_(" -z, --gzip compress tar output\n"));
|
||||||
printf(_(" -Z, --compress=0-9 compress tar output with given compression level\n"));
|
printf(_(" -Z, --compress=0-9 compress tar output with given compression level\n"));
|
||||||
printf(_("\nGeneral options:\n"));
|
printf(_("\nGeneral options:\n"));
|
||||||
@ -980,10 +982,14 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum)
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* When streaming WAL, pg_xlog will have been created
|
* When streaming WAL, pg_xlog will have been created
|
||||||
* by the wal receiver process, so just ignore failure
|
* by the wal receiver process. Also, when transaction
|
||||||
* on that.
|
* log directory location was specified, pg_xlog has
|
||||||
|
* already been created as a symbolic link before
|
||||||
|
* starting the actual backup. So just ignore failure
|
||||||
|
* on them.
|
||||||
*/
|
*/
|
||||||
if (!streamwal || strcmp(filename + strlen(filename) - 8, "/pg_xlog") != 0)
|
if ((!streamwal && (strcmp(xlog_dir, "") == 0))
|
||||||
|
|| strcmp(filename + strlen(filename) - 8, "/pg_xlog") != 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
_("%s: could not create directory \"%s\": %s\n"),
|
_("%s: could not create directory \"%s\": %s\n"),
|
||||||
@ -1666,6 +1672,7 @@ main(int argc, char **argv)
|
|||||||
{"status-interval", required_argument, NULL, 's'},
|
{"status-interval", required_argument, NULL, 's'},
|
||||||
{"verbose", no_argument, NULL, 'v'},
|
{"verbose", no_argument, NULL, 'v'},
|
||||||
{"progress", no_argument, NULL, 'P'},
|
{"progress", no_argument, NULL, 'P'},
|
||||||
|
{"xlogdir", required_argument, NULL, 1},
|
||||||
{NULL, 0, NULL, 0}
|
{NULL, 0, NULL, 0}
|
||||||
};
|
};
|
||||||
int c;
|
int c;
|
||||||
@ -1750,6 +1757,9 @@ main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 1:
|
||||||
|
xlog_dir = pg_strdup(optarg);
|
||||||
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
label = pg_strdup(optarg);
|
label = pg_strdup(optarg);
|
||||||
break;
|
break;
|
||||||
@ -1872,6 +1882,30 @@ main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(xlog_dir, "") != 0)
|
||||||
|
{
|
||||||
|
if (format != 'p')
|
||||||
|
{
|
||||||
|
fprintf(stderr,
|
||||||
|
_("%s: transaction log directory location can only be specified in plain mode\n"),
|
||||||
|
progname);
|
||||||
|
fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
|
||||||
|
progname);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* clean up xlog directory name, check it's absolute */
|
||||||
|
canonicalize_path(xlog_dir);
|
||||||
|
if (!is_absolute_path(xlog_dir))
|
||||||
|
{
|
||||||
|
fprintf(stderr, _("%s: transaction log directory location must be "
|
||||||
|
"an absolute path\n"), progname);
|
||||||
|
fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
|
||||||
|
progname);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef HAVE_LIBZ
|
#ifndef HAVE_LIBZ
|
||||||
if (compresslevel != 0)
|
if (compresslevel != 0)
|
||||||
{
|
{
|
||||||
@ -1890,6 +1924,30 @@ main(int argc, char **argv)
|
|||||||
if (format == 'p' || strcmp(basedir, "-") != 0)
|
if (format == 'p' || strcmp(basedir, "-") != 0)
|
||||||
verify_dir_is_empty_or_create(basedir);
|
verify_dir_is_empty_or_create(basedir);
|
||||||
|
|
||||||
|
/* Create transaction log symlink, if required */
|
||||||
|
if (strcmp(xlog_dir, "") != 0)
|
||||||
|
{
|
||||||
|
char *linkloc;
|
||||||
|
|
||||||
|
verify_dir_is_empty_or_create(xlog_dir);
|
||||||
|
|
||||||
|
/* form name of the place where the symlink must go */
|
||||||
|
linkloc = psprintf("%s/pg_xlog", basedir);
|
||||||
|
|
||||||
|
#ifdef HAVE_SYMLINK
|
||||||
|
if (symlink(xlog_dir, linkloc) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, _("%s: could not create symbolic link \"%s\": %s\n"),
|
||||||
|
progname, linkloc, strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
fprintf(stderr, _("%s: symlinks are not supported on this platform"));
|
||||||
|
exit(1);
|
||||||
|
#endif
|
||||||
|
free(linkloc);
|
||||||
|
}
|
||||||
|
|
||||||
BaseBackup();
|
BaseBackup();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user