1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-19 13:42:17 +03:00

Allow dbname to be written as part of connstring via pg_basebackup's -R option.

Commit cca97ce6a6 allowed dbname in pg_basebackup connstring and in this
commit we allow it to be written in postgresql.auto.conf when -R option is
used. The database name in the connection string will be used by the
logical replication slot synchronization on standby.

The dbname will be recorded only if specified explicitly in the connection
string or environment variable.

Masahiko Sawada hasn't reviewed the code in detail but endorsed the idea.

Author: Vignesh C, Kuroda Hayato
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/CAB8KJ=hdKdg+UeXhReeHpHA6N6v3e0qFF+ZsPFHk9_ThWKf=2A@mail.gmail.com
This commit is contained in:
Amit Kapila
2024-03-21 10:48:59 +05:30
parent 30e144287a
commit a145f424d5
8 changed files with 127 additions and 8 deletions

View File

@@ -18,9 +18,14 @@ static char *escape_quotes(const char *src);
/*
* Write recovery configuration contents into a fresh PQExpBuffer, and
* return it.
*
* This accepts the dbname which will be appended to the primary_conninfo.
* The dbname will be ignored by walreciever process but slotsync worker uses
* it to connect to the primary server.
*/
PQExpBuffer
GenerateRecoveryConfig(PGconn *pgconn, const char *replication_slot)
GenerateRecoveryConfig(PGconn *pgconn, const char *replication_slot,
char *dbname)
{
PQconninfoOption *connOptions;
PQExpBufferData conninfo_buf;
@@ -66,6 +71,20 @@ GenerateRecoveryConfig(PGconn *pgconn, const char *replication_slot)
appendPQExpBuffer(&conninfo_buf, "%s=", opt->keyword);
appendConnStrVal(&conninfo_buf, opt->val);
}
if (dbname)
{
/*
* If dbname is specified in the connection, append the dbname. This
* will be used later for logical replication slot synchronization.
*/
if (conninfo_buf.len != 0)
appendPQExpBufferChar(&conninfo_buf, ' ');
appendPQExpBuffer(&conninfo_buf, "%s=", "dbname");
appendConnStrVal(&conninfo_buf, dbname);
}
if (PQExpBufferDataBroken(conninfo_buf))
pg_fatal("out of memory");