aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2014-11-25 18:24:07 +0200
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2014-11-25 18:26:05 +0200
commitb3fc6727ce54a16ae9227bcccfebfa028ac5b16f (patch)
tree239a6d2104bb8dd6cd6ed6ab18430287b7b41513 /src
parentadd1b052e2b2d5206474d58db25e48820242d15b (diff)
downloadpostgresql-b3fc6727ce54a16ae9227bcccfebfa028ac5b16f.tar.gz
postgresql-b3fc6727ce54a16ae9227bcccfebfa028ac5b16f.zip
Allow using connection URI in primary_conninfo.
The old method of appending options to the connection string didn't work if the primary_conninfo was a postgres:// style URI, instead of a traditional connection string. Use PQconnectdbParams instead. Alex Shulgin
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/libpqwalreceiver/libpqwalreceiver.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
index 65e95c59f02..96e73fb6a4d 100644
--- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
+++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
@@ -89,18 +89,28 @@ _PG_init(void)
static void
libpqrcv_connect(char *conninfo)
{
- char conninfo_repl[MAXCONNINFO + 75];
+ const char *keys[5];
+ const char *vals[5];
/*
- * Connect using deliberately undocumented parameter: replication. The
- * database name is ignored by the server in replication mode, but specify
- * "replication" for .pgpass lookup.
+ * We use the expand_dbname parameter to process the connection string
+ * (or URI), and pass some extra options. The deliberately undocumented
+ * parameter "replication=true" makes it a replication connection.
+ * The database name is ignored by the server in replication mode, but
+ * specify "replication" for .pgpass lookup.
*/
- snprintf(conninfo_repl, sizeof(conninfo_repl),
- "%s dbname=replication replication=true fallback_application_name=walreceiver",
- conninfo);
-
- streamConn = PQconnectdb(conninfo_repl);
+ keys[0] = "dbname";
+ vals[0] = conninfo;
+ keys[1] = "replication";
+ vals[1] = "true";
+ keys[2] = "dbname";
+ vals[2] = "replication";
+ keys[3] = "fallback_application_name";
+ vals[3] = "walreceiver";
+ keys[4] = NULL;
+ vals[4] = NULL;
+
+ streamConn = PQconnectdbParams(keys, vals, /* expand_dbname = */ true);
if (PQstatus(streamConn) != CONNECTION_OK)
ereport(ERROR,
(errmsg("could not connect to the primary server: %s",