diff --git a/repmgr.c b/repmgr.c index b397b2f8..5dc86494 100644 --- a/repmgr.c +++ b/repmgr.c @@ -2991,7 +2991,9 @@ check_server_version(PGconn *conn, char *server_type, bool exit_on_error, char * * * Perform sanity check on upstream server configuration * - * TODO: check replication connection is possble + * TODO: + * - check replication connection is possble + * - check user is qualified to perform base backup */ static bool @@ -2999,16 +3001,40 @@ check_upstream_config(PGconn *conn, int server_version_num, bool exit_on_error) { int i; bool config_ok = true; + char *wal_error_message = NULL; + /* Check that WAL level is set correctly */ - /* XXX check user is qualified to perform base backup */ + if(server_version_num < 90300) + { + i = guc_set(conn, "wal_level", "=", "hot_standby"); + wal_error_message = "needs parameter 'wal_level' to be set to 'hot_standby'"; + } + else + { + char *levels[] = { + "hot_standby", + "logical", + }; + + int j = 0; + wal_error_message = "needs parameter 'wal_level' to be set to 'hot_standby' or 'logical'"; + + for(; j < 2; j++) + { + i = guc_set(conn, "wal_level", "=", levels[j]); + if(i) + { + break; + } + } + } - /* And check if it is well configured */ - i = guc_set(conn, "wal_level", "=", "hot_standby"); if (i == 0 || i == -1) { if (i == 0) - log_err(_("%s needs parameter 'wal_level' to be set to 'hot_standby'\n"), - progname); + log_err(_("%s %s\n"), + progname, + wal_error_message); if(exit_on_error == true) { PQfinish(conn);