diff --git a/src/fe_utils/recovery_gen.c b/src/fe_utils/recovery_gen.c index 2585f11939..c3eb1a59a0 100644 --- a/src/fe_utils/recovery_gen.c +++ b/src/fe_utils/recovery_gen.c @@ -49,12 +49,20 @@ GenerateRecoveryConfig(PGconn *pgconn, char *replication_slot) { /* Omit empty settings and those libpqwalreceiver overrides. */ if (strcmp(opt->keyword, "replication") == 0 || - strcmp(opt->keyword, "dbname") == 0 || strcmp(opt->keyword, "fallback_application_name") == 0 || (opt->val == NULL) || (opt->val != NULL && opt->val[0] == '\0')) continue; + /* + * Omit "dbname" if the special value "replication" is specified, or + * the server version is 16 and earlier. + */ + if (strcmp(opt->keyword, "dbname") == 0 && + (strcmp(opt->val, "replication") == 0 || + PQserverVersion(pgconn) < MINIMUM_VERSION_FOR_DBNAME_PARAM)) + continue; + /* Separate key-value pairs with spaces */ if (conninfo_buf.len != 0) appendPQExpBufferChar(&conninfo_buf, ' '); diff --git a/src/include/fe_utils/recovery_gen.h b/src/include/fe_utils/recovery_gen.h index ca2c4800d0..740d90c9d8 100644 --- a/src/include/fe_utils/recovery_gen.h +++ b/src/include/fe_utils/recovery_gen.h @@ -20,6 +20,12 @@ */ #define MINIMUM_VERSION_FOR_RECOVERY_GUC 120000 +/* + * from version 17, there is a use-case for adding the dbname parameter + * to the generated "primary_conninfo" value + */ +#define MINIMUM_VERSION_FOR_DBNAME_PARAM 170000 + extern PQExpBuffer GenerateRecoveryConfig(PGconn *pgconn, char *replication_slot); extern void WriteRecoveryConfig(PGconn *pgconn, char *target_dir,