From d8262fb21fa880d87f42be6759bc2d27207503c7 Mon Sep 17 00:00:00 2001 From: vikrantm-vunet Date: Wed, 14 Jan 2026 11:17:44 +0530 Subject: [PATCH 1/4] Added dbname support for syncing replication slots for pg17+ --- repmgr-action-standby.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/repmgr-action-standby.c b/repmgr-action-standby.c index a55462b0..c4bcc372 100644 --- a/repmgr-action-standby.c +++ b/repmgr-action-standby.c @@ -125,7 +125,7 @@ static int get_tablespace_data_barman(char *, TablespaceDataList *); static char *make_barman_ssh_command(char *buf); static bool create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_conninfo, int server_version_num, char *dest, bool as_file); -static void write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list); +static void write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list, int server_version_num); static bool check_sibling_nodes(NodeInfoList *sibling_nodes, SiblingNodeStats *sibling_nodes_stats); static bool check_free_wal_senders(int available_wal_senders, SiblingNodeStats *sibling_nodes_stats, bool *dry_run_success); @@ -8221,7 +8221,7 @@ create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_co } /* primary_conninfo = '...' */ - write_primary_conninfo(&primary_conninfo_buf, primary_conninfo); + write_primary_conninfo(&primary_conninfo_buf, primary_conninfo, server_version_num); key_value_list_set(&recovery_config, "primary_conninfo", primary_conninfo_buf.data); @@ -8363,7 +8363,7 @@ create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_co static void -write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list) +write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list, int server_version_num) { PQExpBufferData conninfo_buf; bool application_name_provided = false; @@ -8379,15 +8379,30 @@ write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list) for (c = 0; c < param_list->size && param_list->keywords[c] != NULL; c++) { /* - * Skip empty settings and ones which don't make any sense in - * recovery.conf - */ - if (strcmp(param_list->keywords[c], "dbname") == 0 || - strcmp(param_list->keywords[c], "replication") == 0 || - (param_list->values[c] == NULL) || + * Skip empty settings and ones which don't make any sense in + * recovery.conf + */ + if ((param_list->values[c] == NULL) || (param_list->values[c] != NULL && param_list->values[c][0] == '\0')) continue; + /* + * Skip "replication" - this is set automatically by libpq for + * replication connections. + */ + if (strcmp(param_list->keywords[c], "replication") == 0) + continue; + + /* + * PostgreSQL 17 and later require "dbname" in primary_conninfo for + * failover replication slots (synchronized slots). Earlier versions + * don't need it and historically it was excluded. + */ + if (strcmp(param_list->keywords[c], "dbname") == 0 && + server_version_num < 170000) + continue; + + /* only include "password" if explicitly requested */ if (strcmp(param_list->keywords[c], "password") == 0) { From 8f64d0fa2e7ef35214d3f423aa9a78928dfbca2b Mon Sep 17 00:00:00 2001 From: vikrantm-vunet Date: Thu, 12 Mar 2026 23:05:33 +0530 Subject: [PATCH 2/4] Included the dbname parameter regardless of the postgres versions in primary_conninfo string --- repmgr-action-standby.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/repmgr-action-standby.c b/repmgr-action-standby.c index c4bcc372..94786c64 100644 --- a/repmgr-action-standby.c +++ b/repmgr-action-standby.c @@ -125,7 +125,7 @@ static int get_tablespace_data_barman(char *, TablespaceDataList *); static char *make_barman_ssh_command(char *buf); static bool create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_conninfo, int server_version_num, char *dest, bool as_file); -static void write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list, int server_version_num); +static void write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list); static bool check_sibling_nodes(NodeInfoList *sibling_nodes, SiblingNodeStats *sibling_nodes_stats); static bool check_free_wal_senders(int available_wal_senders, SiblingNodeStats *sibling_nodes_stats, bool *dry_run_success); @@ -8221,7 +8221,7 @@ create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_co } /* primary_conninfo = '...' */ - write_primary_conninfo(&primary_conninfo_buf, primary_conninfo, server_version_num); + write_primary_conninfo(&primary_conninfo_buf, primary_conninfo); key_value_list_set(&recovery_config, "primary_conninfo", primary_conninfo_buf.data); @@ -8363,7 +8363,7 @@ create_recovery_file(t_node_info *node_record, t_conninfo_param_list *primary_co static void -write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list, int server_version_num) +write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list) { PQExpBufferData conninfo_buf; bool application_name_provided = false; @@ -8393,16 +8393,6 @@ write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list, if (strcmp(param_list->keywords[c], "replication") == 0) continue; - /* - * PostgreSQL 17 and later require "dbname" in primary_conninfo for - * failover replication slots (synchronized slots). Earlier versions - * don't need it and historically it was excluded. - */ - if (strcmp(param_list->keywords[c], "dbname") == 0 && - server_version_num < 170000) - continue; - - /* only include "password" if explicitly requested */ if (strcmp(param_list->keywords[c], "password") == 0) { From 2f7b1d995e19648977304034d32bcb2993302949 Mon Sep 17 00:00:00 2001 From: vikrantm-vunet Date: Thu, 12 Mar 2026 23:17:43 +0530 Subject: [PATCH 3/4] Included the dbname parameter regardless of the postgres versions in primary_conninfo string --- repmgr-action-standby.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/repmgr-action-standby.c b/repmgr-action-standby.c index 94786c64..137b1165 100644 --- a/repmgr-action-standby.c +++ b/repmgr-action-standby.c @@ -8383,14 +8383,8 @@ write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list) * recovery.conf */ if ((param_list->values[c] == NULL) || - (param_list->values[c] != NULL && param_list->values[c][0] == '\0')) - continue; - - /* - * Skip "replication" - this is set automatically by libpq for - * replication connections. - */ - if (strcmp(param_list->keywords[c], "replication") == 0) + (param_list->values[c][0] == '\0') || + (strcmp(param_list->keywords[c], "replication") == 0)) continue; /* only include "password" if explicitly requested */ From 29235085e9d911762e8d2172b11993ec684fd1a8 Mon Sep 17 00:00:00 2001 From: vikrantm-vunet Date: Thu, 12 Mar 2026 23:23:15 +0530 Subject: [PATCH 4/4] Included the dbname parameter regardless of the postgres versions in primary_conninfo string --- repmgr-action-standby.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/repmgr-action-standby.c b/repmgr-action-standby.c index 137b1165..526ffce0 100644 --- a/repmgr-action-standby.c +++ b/repmgr-action-standby.c @@ -8382,9 +8382,9 @@ write_primary_conninfo(PQExpBufferData *dest, t_conninfo_param_list *param_list) * Skip empty settings and ones which don't make any sense in * recovery.conf */ - if ((param_list->values[c] == NULL) || - (param_list->values[c][0] == '\0') || - (strcmp(param_list->keywords[c], "replication") == 0)) + if (strcmp(param_list->keywords[c], "replication") == 0 || + (param_list->values[c] == NULL) || + (param_list->values[c] != NULL && param_list->values[c][0] == '\0')) continue; /* only include "password" if explicitly requested */