Hi, Some time ago I had to work on a system where I was cloning a standby using pg_basebackup, that didn't have screen or tmux. For that reason I redirected the output to a file and ran it with nohup.
I normally (always actually ;) ) run pg_basebackup with --progress and --verbose so I can follow how much has been done. When done on a tty you get a nice progress bar with the percentage that has been cloned. The problem came with the execution and redirection of the output, as the --progress option will write a *very* long line! Back then I thought of writing a patch (actually someone suggested I do so) to add a --batch-mode option which would change the behavior pg_basebackup has when printing the output messages. Attach is the patch. I'll be submitting it to the CF. P.D.: I'm aware that there's a documentation patch missing. :) Kind regards, -- Martín Marqués http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
>From f6e54c0d062d62daf70c0870f96032eb0c102e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Marqu=C3=A9s?= <martin.marq...@2ndquadrant.com> Date: Fri, 29 Sep 2017 19:21:44 -0300 Subject: [PATCH] Adding an option to pg_basebackup to output messages as if it were running in batch-mode, as opossed to running in a tty. This is usefull when using --progress and redirecting the output to a file for later inspection with tail. New option --batch-mode with the short option -b added. --- src/bin/pg_basebackup/pg_basebackup.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index dac7299..cf97ea3 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -82,6 +82,7 @@ static char format = 'p'; /* p(lain)/t(ar) */ static char *label = "pg_basebackup base backup"; static bool noclean = false; static bool showprogress = false; +static bool batchmode = false; static int verbose = 0; static int compresslevel = 0; static IncludeWal includewal = STREAM_WAL; @@ -355,6 +356,7 @@ usage(void) printf(_(" -P, --progress show progress information\n")); printf(_(" -S, --slot=SLOTNAME replication slot to use\n")); printf(_(" --no-slot prevent creation of temporary replication slot\n")); + printf(_(" -b, --batch-mode run in batch mode\n")); printf(_(" -v, --verbose output verbose messages\n")); printf(_(" -V, --version output version information, then exit\n")); printf(_(" -?, --help show this help, then exit\n")); @@ -806,7 +808,10 @@ progress_report(int tablespacenum, const char *filename, bool force) totaldone_str, totalsize_str, percent, tablespacenum, tablespacecount); - fprintf(stderr, "\r"); + if (batchmode) + fprintf(stderr, "\n"); + else + fprintf(stderr, "\r"); } static int32 @@ -1786,7 +1791,13 @@ BaseBackup(void) progname); if (showprogress && !verbose) + { fprintf(stderr, "waiting for checkpoint\r"); + if (batchmode) + fprintf(stderr, "\n"); + else + fprintf(stderr, "\r"); + } basebkp = psprintf("BASE_BACKUP LABEL '%s' %s %s %s %s %s %s", @@ -2118,6 +2129,7 @@ main(int argc, char **argv) {"status-interval", required_argument, NULL, 's'}, {"verbose", no_argument, NULL, 'v'}, {"progress", no_argument, NULL, 'P'}, + {"batch-mode", no_argument, NULL, 'b'}, {"waldir", required_argument, NULL, 1}, {"no-slot", no_argument, NULL, 2}, {NULL, 0, NULL, 0} @@ -2146,7 +2158,7 @@ main(int argc, char **argv) atexit(cleanup_directories_atexit); - while ((c = getopt_long(argc, argv, "CD:F:r:RS:T:X:l:nNzZ:d:c:h:p:U:s:wWvP", + while ((c = getopt_long(argc, argv, "CD:F:r:RS:T:X:l:nNzZ:d:c:h:p:U:s:wWvPb", long_options, &option_index)) != -1) { switch (c) @@ -2288,6 +2300,9 @@ main(int argc, char **argv) case 'P': showprogress = true; break; + case 'b': + batchmode = true; + break; default: /* -- 2.9.5
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers