Hi,
The attached patch adds an -a / --appname command line switch to
pg_basebackup, pg_receivewal and pg_recvlogical.
This is useful when f.ex. pg_receivewal needs to connect as a
synchronous client (synchronous_standby_names),
pg_receivewal -h myhost -p 5432 -S replica1 -a replica1 --synchronous
-D /wal
I'll add the patch to the CommitFest for discussion, as there is overlap
with the -d switch.
Best regards,
Jesper
>From 3aee659423137a547ed178a1dab34fe3caf30702 Mon Sep 17 00:00:00 2001
From: jesperpedersen <jesper.peder...@redhat.com>
Date: Thu, 31 Oct 2019 08:34:41 -0400
Subject: [PATCH] Add an -a / --appname command line switch to control the
application_name property.
Author: Jesper Pedersen <jesper.peder...@redhat.com>
---
doc/src/sgml/ref/pg_basebackup.sgml | 11 +++++++++++
doc/src/sgml/ref/pg_receivewal.sgml | 11 +++++++++++
doc/src/sgml/ref/pg_recvlogical.sgml | 11 +++++++++++
src/bin/pg_basebackup/pg_basebackup.c | 7 ++++++-
src/bin/pg_basebackup/pg_receivewal.c | 7 ++++++-
src/bin/pg_basebackup/pg_recvlogical.c | 7 ++++++-
src/bin/pg_basebackup/streamutil.c | 7 +++++++
src/bin/pg_basebackup/streamutil.h | 1 +
8 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/doc/src/sgml/ref/pg_basebackup.sgml b/doc/src/sgml/ref/pg_basebackup.sgml
index fc9e222f8d..28b5dee206 100644
--- a/doc/src/sgml/ref/pg_basebackup.sgml
+++ b/doc/src/sgml/ref/pg_basebackup.sgml
@@ -543,6 +543,17 @@ PostgreSQL documentation
The following command-line options control the database connection parameters.
<variablelist>
+ <varlistentry>
+ <term><option>-a <replaceable class="parameter">application_name</replaceable></option></term>
+ <term><option>--appname=<replaceable class="parameter">application_name</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the application name used to connect to the server.
+ See <xref linkend="libpq-paramkeywords"/> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>-d <replaceable class="parameter">connstr</replaceable></option></term>
<term><option>--dbname=<replaceable class="parameter">connstr</replaceable></option></term>
diff --git a/doc/src/sgml/ref/pg_receivewal.sgml b/doc/src/sgml/ref/pg_receivewal.sgml
index 177e9211c0..0957e0a9f5 100644
--- a/doc/src/sgml/ref/pg_receivewal.sgml
+++ b/doc/src/sgml/ref/pg_receivewal.sgml
@@ -248,6 +248,17 @@ PostgreSQL documentation
The following command-line options control the database connection parameters.
<variablelist>
+ <varlistentry>
+ <term><option>-a <replaceable class="parameter">application_name</replaceable></option></term>
+ <term><option>--appname=<replaceable class="parameter">application_name</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the application name used to connect to the server.
+ See <xref linkend="libpq-paramkeywords"/> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>-d <replaceable class="parameter">connstr</replaceable></option></term>
<term><option>--dbname=<replaceable class="parameter">connstr</replaceable></option></term>
diff --git a/doc/src/sgml/ref/pg_recvlogical.sgml b/doc/src/sgml/ref/pg_recvlogical.sgml
index 4c79f90414..b2d9b35362 100644
--- a/doc/src/sgml/ref/pg_recvlogical.sgml
+++ b/doc/src/sgml/ref/pg_recvlogical.sgml
@@ -272,6 +272,17 @@ PostgreSQL documentation
The following command-line options control the database connection parameters.
<variablelist>
+ <varlistentry>
+ <term><option>-a <replaceable class="parameter">application_name</replaceable></option></term>
+ <term><option>--appname=<replaceable class="parameter">application_name</replaceable></option></term>
+ <listitem>
+ <para>
+ Specifies the application name used to connect to the server.
+ See <xref linkend="libpq-paramkeywords"/> for more information.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>-d <replaceable>database</replaceable></option></term>
<term><option>--dbname=<replaceable>database</replaceable></option></term>
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index a9d162a7da..237945f879 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -351,6 +351,7 @@ usage(void)
" do not verify checksums\n"));
printf(_(" -?, --help show this help, then exit\n"));
printf(_("\nConnection options:\n"));
+ printf(_(" -a, --appname=NAME application name\n"));
printf(_(" -d, --dbname=CONNSTR connection string\n"));
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
printf(_(" -p, --port=PORT database server port number\n"));
@@ -2031,6 +2032,7 @@ main(int argc, char **argv)
{"label", required_argument, NULL, 'l'},
{"no-clean", no_argument, NULL, 'n'},
{"no-sync", no_argument, NULL, 'N'},
+ {"appname", required_argument, NULL, 'a'},
{"dbname", required_argument, NULL, 'd'},
{"host", required_argument, NULL, 'h'},
{"port", required_argument, NULL, 'p'},
@@ -2070,7 +2072,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:wWkvP",
+ while ((c = getopt_long(argc, argv, "CD:F:r:RS:T:X:l:nNzZ:a:d:c:h:p:U:s:wWkvP",
long_options, &option_index)) != -1)
{
switch (c)
@@ -2176,6 +2178,9 @@ main(int argc, char **argv)
exit(1);
}
break;
+ case 'a':
+ application_name = pg_strdup(optarg);
+ break;
case 'd':
connection_string = pg_strdup(optarg);
break;
diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c
index c0c8747982..863dcdb161 100644
--- a/src/bin/pg_basebackup/pg_receivewal.c
+++ b/src/bin/pg_basebackup/pg_receivewal.c
@@ -93,6 +93,7 @@ usage(void)
printf(_(" -Z, --compress=0-9 compress logs with given compression level\n"));
printf(_(" -?, --help show this help, then exit\n"));
printf(_("\nConnection options:\n"));
+ printf(_(" -a, --appname=NAME application name\n"));
printf(_(" -d, --dbname=CONNSTR connection string\n"));
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
printf(_(" -p, --port=PORT database server port number\n"));
@@ -470,6 +471,7 @@ main(int argc, char **argv)
{"help", no_argument, NULL, '?'},
{"version", no_argument, NULL, 'V'},
{"directory", required_argument, NULL, 'D'},
+ {"appname", required_argument, NULL, 'a'},
{"dbname", required_argument, NULL, 'd'},
{"endpos", required_argument, NULL, 'E'},
{"host", required_argument, NULL, 'h'},
@@ -516,7 +518,7 @@ main(int argc, char **argv)
}
}
- while ((c = getopt_long(argc, argv, "D:d:E:h:p:U:s:S:nwWvZ:",
+ while ((c = getopt_long(argc, argv, "D:a:d:E:h:p:U:s:S:nwWvZ:",
long_options, &option_index)) != -1)
{
switch (c)
@@ -524,6 +526,9 @@ main(int argc, char **argv)
case 'D':
basedir = pg_strdup(optarg);
break;
+ case 'a':
+ application_name = pg_strdup(optarg);
+ break;
case 'd':
connection_string = pg_strdup(optarg);
break;
diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c
index 12a3505226..badb2b7052 100644
--- a/src/bin/pg_basebackup/pg_recvlogical.c
+++ b/src/bin/pg_basebackup/pg_recvlogical.c
@@ -97,6 +97,7 @@ usage(void)
printf(_(" -V, --version output version information, then exit\n"));
printf(_(" -?, --help show this help, then exit\n"));
printf(_("\nConnection options:\n"));
+ printf(_(" -a, --appname=NAME application name\n"));
printf(_(" -d, --dbname=DBNAME database to connect to\n"));
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
printf(_(" -p, --port=PORT database server port number\n"));
@@ -654,6 +655,7 @@ main(int argc, char **argv)
{"version", no_argument, NULL, 'V'},
{"help", no_argument, NULL, '?'},
/* connection options */
+ {"appname", required_argument, NULL, 'a'},
{"dbname", required_argument, NULL, 'd'},
{"host", required_argument, NULL, 'h'},
{"port", required_argument, NULL, 'p'},
@@ -699,7 +701,7 @@ main(int argc, char **argv)
}
}
- while ((c = getopt_long(argc, argv, "E:f:F:nvd:h:p:U:wWI:o:P:s:S:",
+ while ((c = getopt_long(argc, argv, "E:f:F:nva:d:h:p:U:wWI:o:P:s:S:",
long_options, &option_index)) != -1)
{
switch (c)
@@ -723,6 +725,9 @@ main(int argc, char **argv)
verbose++;
break;
/* connection options */
+ case 'a':
+ application_name = pg_strdup(optarg);
+ break;
case 'd':
dbname = pg_strdup(optarg);
break;
diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c
index 94d1a12b9b..1130212c5d 100644
--- a/src/bin/pg_basebackup/streamutil.c
+++ b/src/bin/pg_basebackup/streamutil.c
@@ -43,6 +43,7 @@ static bool RetrieveDataDirCreatePerm(PGconn *conn);
#define MINIMUM_VERSION_FOR_GROUP_ACCESS 110000
const char *progname;
+char *application_name = NULL;
char *connection_string = NULL;
char *dbhost = NULL;
char *dbuser = NULL;
@@ -130,6 +131,12 @@ GetConnection(void)
values[i] = progname;
i++;
+ if (application_name)
+ {
+ keywords[i] = "application_name";
+ values[i] = application_name;
+ i++;
+ }
if (dbhost)
{
keywords[i] = "host";
diff --git a/src/bin/pg_basebackup/streamutil.h b/src/bin/pg_basebackup/streamutil.h
index a756eee262..a0166315bc 100644
--- a/src/bin/pg_basebackup/streamutil.h
+++ b/src/bin/pg_basebackup/streamutil.h
@@ -18,6 +18,7 @@
#include "datatype/timestamp.h"
extern const char *progname;
+extern char *application_name;
extern char *connection_string;
extern char *dbhost;
extern char *dbuser;
--
2.21.0