diff --git a/dbutils.c b/dbutils.c index 9fe485d6..8f488e5a 100644 --- a/dbutils.c +++ b/dbutils.c @@ -2775,8 +2775,15 @@ get_last_wal_receive_location(PGconn *conn) PGresult *res; XLogRecPtr ptr = InvalidXLogRecPtr; - // pre-10 !!! - res = PQexec(conn, "SELECT pg_catalog.pg_last_wal_receive_lsn()"); + + if (server_version_num >= 100000) + { + res = PQexec(conn, "SELECT pg_catalog.pg_last_wal_receive_lsn()"); + } + else + { + res = PQexec(conn, "SELECT pg_catalog.pg_last_xlog_receive_location()"); + } if (PQresultStatus(res) == PGRES_TUPLES_OK) { diff --git a/repmgrd.c b/repmgrd.c index 0306377f..18faad3f 100644 --- a/repmgrd.c +++ b/repmgrd.c @@ -37,6 +37,7 @@ PGconn *local_conn = NULL; /* Collate command line errors here for friendlier reporting */ static ItemList cli_errors = { NULL, NULL }; +int server_version_num = 0; bool startup_event_logged = false; MonitoringState monitoring_state = MS_NORMAL; @@ -286,6 +287,12 @@ main(int argc, char **argv) /* abort if local node not available at startup */ local_conn = establish_db_connection(config_file_options.conninfo, true); + /* + * store the server version number - we'll need this to generate + * version-dependent queries etc. + */ + server_version_num = get_server_version(local_conn, NULL); + /* * sanity checks * diff --git a/repmgrd.h b/repmgrd.h index 4c9443f7..eb651743 100644 --- a/repmgrd.h +++ b/repmgrd.h @@ -26,7 +26,8 @@ extern instr_time degraded_monitoring_start; extern t_configuration_options config_file_options; extern t_node_info local_node_info; extern PGconn *local_conn; -extern bool startup_event_logged; +extern bool startup_event_logged; +extern int server_version_num; PGconn *try_reconnect(const char *conninfo, NodeStatus *node_status);