Commit b3fc6727 authored by Heikki Linnakangas's avatar Heikki Linnakangas

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
parent add1b052
...@@ -89,18 +89,28 @@ _PG_init(void) ...@@ -89,18 +89,28 @@ _PG_init(void)
static void static void
libpqrcv_connect(char *conninfo) libpqrcv_connect(char *conninfo)
{ {
char conninfo_repl[MAXCONNINFO + 75]; const char *keys[5];
const char *vals[5];
/* /*
* Connect using deliberately undocumented parameter: replication. The * We use the expand_dbname parameter to process the connection string
* database name is ignored by the server in replication mode, but specify * (or URI), and pass some extra options. The deliberately undocumented
* "replication" for .pgpass lookup. * 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), keys[0] = "dbname";
"%s dbname=replication replication=true fallback_application_name=walreceiver", vals[0] = conninfo;
conninfo); keys[1] = "replication";
vals[1] = "true";
streamConn = PQconnectdb(conninfo_repl); 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) if (PQstatus(streamConn) != CONNECTION_OK)
ereport(ERROR, ereport(ERROR,
(errmsg("could not connect to the primary server: %s", (errmsg("could not connect to the primary server: %s",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment