diff --git a/controldata.c b/controldata.c index 7abcb9b3..ce90bd24 100644 --- a/controldata.c +++ b/controldata.c @@ -277,8 +277,19 @@ get_controlfile(const char *DataDir) return control_file_info; } - - if (version_num >= 90500) + if (version_num >= 120000) + { +#if PG_ACTUAL_VERSION_NUM >= 120000 + expected_size = sizeof(ControlFileData12); + ControlFileDataPtr = palloc0(expected_size); +#endif + } + else if (version_num >= 110000) + { + expected_size = sizeof(ControlFileData11); + ControlFileDataPtr = palloc0(expected_size); + } + else if (version_num >= 90500) { expected_size = sizeof(ControlFileData95); ControlFileDataPtr = palloc0(expected_size); @@ -288,12 +299,6 @@ get_controlfile(const char *DataDir) expected_size = sizeof(ControlFileData94); ControlFileDataPtr = palloc0(expected_size); } - else if (version_num >= 90300) - { - expected_size = sizeof(ControlFileData93); - ControlFileDataPtr = palloc0(expected_size); - } - if (read(fd, ControlFileDataPtr, expected_size) != expected_size) { @@ -359,17 +364,6 @@ get_controlfile(const char *DataDir) control_file_info->minRecoveryPointTLI = ptr->minRecoveryPointTLI; control_file_info->minRecoveryPoint = ptr->minRecoveryPoint; } - else if (version_num >= 90300) - { - ControlFileData93 *ptr = (struct ControlFileData93 *)ControlFileDataPtr; - control_file_info->system_identifier = ptr->system_identifier; - control_file_info->state = ptr->state; - control_file_info->checkPoint = ptr->checkPoint; - control_file_info->data_checksum_version = ptr->data_checksum_version; - control_file_info->timeline = ptr->checkPointCopy.ThisTimeLineID; - control_file_info->minRecoveryPointTLI = ptr->minRecoveryPointTLI; - control_file_info->minRecoveryPoint = ptr->minRecoveryPoint; - } pfree(ControlFileDataPtr); diff --git a/controldata.h b/controldata.h index cad9a107..c5554662 100644 --- a/controldata.h +++ b/controldata.h @@ -31,9 +31,7 @@ typedef struct } ControlFileInfo; - -/* Same for 9.3, 9.4 */ -typedef struct CheckPoint93 +typedef struct CheckPoint94 { XLogRecPtr redo; /* next RecPtr available when we began to * create CheckPoint (i.e. REDO start point) */ @@ -53,7 +51,7 @@ typedef struct CheckPoint93 pg_time_t time; /* time stamp of checkpoint */ TransactionId oldestActiveXid; -} CheckPoint93; +} CheckPoint94; /* Same for 9.5, 9.6, 10, 11 */ @@ -128,65 +126,6 @@ typedef struct CheckPoint12 } CheckPoint12; #endif -typedef struct ControlFileData93 -{ - uint64 system_identifier; - - uint32 pg_control_version; /* PG_CONTROL_VERSION */ - uint32 catalog_version_no; /* see catversion.h */ - - DBState state; /* see enum above */ - pg_time_t time; /* time stamp of last pg_control update */ - XLogRecPtr checkPoint; /* last check point record ptr */ - XLogRecPtr prevCheckPoint; /* previous check point record ptr */ - - CheckPoint93 checkPointCopy; /* copy of last check point record */ - - XLogRecPtr unloggedLSN; /* current fake LSN value, for unlogged rels */ - - XLogRecPtr minRecoveryPoint; - TimeLineID minRecoveryPointTLI; - XLogRecPtr backupStartPoint; - XLogRecPtr backupEndPoint; - bool backupEndRequired; - - int wal_level; - int MaxConnections; - int max_prepared_xacts; - int max_locks_per_xact; - - uint32 maxAlign; /* alignment requirement for tuples */ - double floatFormat; /* constant 1234567.0 */ - - uint32 blcksz; /* data block size for this DB */ - uint32 relseg_size; /* blocks per segment of large relation */ - - uint32 xlog_blcksz; /* block size within WAL files */ - uint32 xlog_seg_size; /* size of each WAL segment */ - - uint32 nameDataLen; /* catalog name field width */ - uint32 indexMaxKeys; /* max number of columns in an index */ - - uint32 toast_max_chunk_size; /* chunk size in TOAST tables */ - - /* flag indicating internal format of timestamp, interval, time */ - bool enableIntTimes; /* int64 storage enabled? */ - - /* flags indicating pass-by-value status of various types */ - bool float4ByVal; /* float4 pass-by-value? */ - bool float8ByVal; /* float8, int8, etc pass-by-value? */ - - /* Are data pages protected by checksums? Zero if no checksum version */ - uint32 data_checksum_version; - -} ControlFileData93; - - -/* - * Following field added since 9.3: - * - * int max_worker_processes; - */ typedef struct ControlFileData94 { @@ -200,7 +139,7 @@ typedef struct ControlFileData94 XLogRecPtr checkPoint; /* last check point record ptr */ XLogRecPtr prevCheckPoint; /* previous check point record ptr */ - CheckPoint93 checkPointCopy; /* copy of last check point record */ + CheckPoint94 checkPointCopy; /* copy of last check point record */ XLogRecPtr unloggedLSN; /* current fake LSN value, for unlogged rels */ diff --git a/dbutils.c b/dbutils.c index b7efb100..e63e051b 100644 --- a/dbutils.c +++ b/dbutils.c @@ -5538,21 +5538,9 @@ get_replication_info(PGconn *conn, t_server_type node_type, ReplInfo *replicatio } else { - if (PQserverVersion(conn) >= 90400) - { - appendPQExpBufferStr(&query, - " COALESCE(pg_catalog.pg_last_xlog_receive_location(), '0/0'::PG_LSN) AS last_wal_receive_lsn, " - " COALESCE(pg_catalog.pg_last_xlog_replay_location(), '0/0'::PG_LSN) AS last_wal_replay_lsn, "); - } - else - { - /* 9.3 does not have "pg_lsn" datatype */ - appendPQExpBufferStr(&query, - " COALESCE(pg_catalog.pg_last_xlog_receive_location(), '0/0') AS last_wal_receive_lsn, " - " COALESCE(pg_catalog.pg_last_xlog_replay_location(), '0/0') AS last_wal_replay_lsn, "); - } - appendPQExpBufferStr(&query, + " COALESCE(pg_catalog.pg_last_xlog_receive_location(), '0/0'::PG_LSN) AS last_wal_receive_lsn, " + " COALESCE(pg_catalog.pg_last_xlog_replay_location(), '0/0'::PG_LSN) AS last_wal_replay_lsn, " " CASE WHEN pg_catalog.pg_is_in_recovery() IS FALSE " " THEN FALSE " " ELSE pg_catalog.pg_is_xlog_replay_paused() " @@ -5723,28 +5711,11 @@ get_node_replication_stats(PGconn *conn, t_node_info *node_info) appendPQExpBufferStr(&query, " SELECT pg_catalog.current_setting('max_wal_senders')::INT AS max_wal_senders, " - " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_stat_replication) AS attached_wal_receivers, "); - - /* no replication slots in PostgreSQL 9.3 */ - if (PQserverVersion(conn) < 90400) - { - appendPQExpBufferStr(&query, - " 0 AS max_replication_slots, " - " 0 AS total_replication_slots, " - " 0 AS active_replication_slots, " - " 0 AS inactive_replication_slots, "); - } - else - { - appendPQExpBufferStr(&query, - " current_setting('max_replication_slots')::INT AS max_replication_slots, " - " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_replication_slots WHERE slot_type='physical') AS total_replication_slots, " - " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_replication_slots WHERE active IS TRUE AND slot_type='physical') AS active_replication_slots, " - " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_replication_slots WHERE active IS FALSE AND slot_type='physical') AS inactive_replication_slots, "); - } - - - appendPQExpBufferStr(&query, + " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_stat_replication) AS attached_wal_receivers, " + " current_setting('max_replication_slots')::INT AS max_replication_slots, " + " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_replication_slots WHERE slot_type='physical') AS total_replication_slots, " + " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_replication_slots WHERE active IS TRUE AND slot_type='physical') AS active_replication_slots, " + " (SELECT pg_catalog.count(*) FROM pg_catalog.pg_replication_slots WHERE active IS FALSE AND slot_type='physical') AS inactive_replication_slots, " " pg_catalog.pg_is_in_recovery() AS in_recovery"); log_verbose(LOG_DEBUG, "get_node_replication_stats():\n%s", query.data); diff --git a/doc/appendix-faq.xml b/doc/appendix-faq.xml index 0f98b21f..3db567d4 100644 --- a/doc/appendix-faq.xml +++ b/doc/appendix-faq.xml @@ -22,6 +22,9 @@ &repmgr; 5 is fundamentally the same code base as &repmgr; 4, but provides support for the revised replication configuration mechanism in PostgreSQL 12. + + Support for PostgreSQL 9.3 is no longer available from &repmgr; 5.2. + &repmgr; 3.x builds on the improved replication facilities added diff --git a/doc/install-requirements.xml b/doc/install-requirements.xml index 374192ad..65bbae9a 100644 --- a/doc/install-requirements.xml +++ b/doc/install-requirements.xml @@ -14,7 +14,7 @@ - &repmgr; &repmgrversion; is compatible with all PostgreSQL versions from 9.3. See + &repmgr; &repmgrversion; is compatible with all PostgreSQL versions from 9.4. See section &repmgr; compatibility matrix for an overview of version compatibility. @@ -115,7 +115,7 @@ - &repmgr; 5.x + &repmgr; 5.2 YES @@ -123,6 +123,21 @@ &repmgrversion; (&releasedate;) + + 9.4, 9.5, 9.6, 10, 11, 12, 13 + + + + + + &repmgr; 5.0, &repmgr; 5.1 + + + YES + + + 5.1 (2020-04-13) + 9.3, 9.4, 9.5, 9.6, 10, 11, 12 @@ -226,6 +241,9 @@ 9.3.25 in November 2018) and will no longer be updated with security or bugfixes. + + Beginning with &repmgr; 5.2, &repmgr; no longer supports PostgreSQL 9.3. + PostgreSQL 9.4 has reached the end of its community support period (final release was 9.4.26 diff --git a/doc/repmgr-node-rejoin.xml b/doc/repmgr-node-rejoin.xml index dbcb5d6b..8195f9c2 100644 --- a/doc/repmgr-node-rejoin.xml +++ b/doc/repmgr-node-rejoin.xml @@ -76,7 +76,7 @@ It is only necessary to provide the pg_rewind path - if using PostgreSQL 9.3 or 9.4, and pg_rewind + if using PostgreSQL 9.4, and pg_rewind is not installed in the PostgreSQL bin directory. @@ -246,7 +246,7 @@ repmgr node rejoin can optionally use pg_rewind to re-integrate a node which has diverged from the rest of the cluster, typically a failed primary. pg_rewind is available in PostgreSQL 9.5 and later as part of the core distribution, - and can be installed from external sources for PostgreSQL 9.3 and 9.4. + and can be installed from external sources for PostgreSQL 9.4. diff --git a/doc/repmgr-standby-switchover.xml b/doc/repmgr-standby-switchover.xml index 02503251..8ae00435 100644 --- a/doc/repmgr-standby-switchover.xml +++ b/doc/repmgr-standby-switchover.xml @@ -147,7 +147,7 @@ Use pg_rewind to reintegrate the old primary if necessary (and the prerequisites for using pg_rewind are met). - If using PostgreSQL 9.3 or 9.4, and the pg_rewind + If using PostgreSQL 9.4, and the pg_rewind binary is not installed in the PostgreSQL bin directory, provide its full path. For more details see also . diff --git a/doc/repmgr.xml b/doc/repmgr.xml index 3cc931e5..aadeac89 100644 --- a/doc/repmgr.xml +++ b/doc/repmgr.xml @@ -26,7 +26,7 @@ This is the official documentation of &repmgr; &repmgrversion; for - use with PostgreSQL 9.3 - PostgreSQL 12. + use with PostgreSQL 9.4 - PostgreSQL 13. &repmgr; is being continually developed and we strongly recommend using the diff --git a/doc/switchover.xml b/doc/switchover.xml index 399729ed..02c74a33 100644 --- a/doc/switchover.xml +++ b/doc/switchover.xml @@ -244,16 +244,15 @@ pg_rewind has been part of the core PostgreSQL distribution since - version 9.5. Users of versions 9.3 and 9.4 will need to manually install it; the source code is available here: + version 9.5. Users of PostgreSQL 9.4 will need to manually install it; the source code is available here: https://github.com/vmware/pg_rewind. If the pg_rewind binary is not installed in the PostgreSQL bin directory, provide its full path on the demotion candidate with . - Note that building the 9.3/9.4 version of pg_rewind requires the PostgreSQL - source code. Also, PostgreSQL 9.3 does not provide wal_log_hints, - meaning data checksums must have been enabled when the database was initialized. + Note that building the 9.4 version of pg_rewind requires the PostgreSQL + source code. @@ -343,7 +342,7 @@ - If using PostgreSQL 9.3 or 9.4, you should ensure that the shutdown command + If using PostgreSQL 9.4, you should ensure that the shutdown command is configured to use PostgreSQL's fast shutdown mode (the default in 9.5 and later). If relying on pg_ctl to perform database server operations, you should include -m fast in pg_ctl_options diff --git a/repmgr-action-node.c b/repmgr-action-node.c index 08eb1f20..316e23d5 100644 --- a/repmgr-action-node.c +++ b/repmgr-action-node.c @@ -85,7 +85,6 @@ do_node_status(void) t_recovery_conf recovery_conf = T_RECOVERY_CONF_INITIALIZER; char data_dir[MAXPGPATH] = ""; - int server_version_num = UNKNOWN_SERVER_VERSION_NUM; char server_version_str[MAXVERSIONSTR] = ""; /* @@ -103,7 +102,7 @@ do_node_status(void) conn = establish_db_connection(config_file_options.conninfo, true); strncpy(data_dir, config_file_options.data_directory, MAXPGPATH); - server_version_num = get_server_version(conn, server_version_str); + (void)get_server_version(conn, server_version_str); /* check node exists */ @@ -334,13 +333,7 @@ do_node_status(void) } } - if (server_version_num < 90400) - { - key_value_list_set(&node_status, - "Replication slots", - "not available"); - } - else if (node_info.max_replication_slots == 0) + if (node_info.max_replication_slots == 0) { key_value_list_set(&node_status, "Replication slots", @@ -1843,12 +1836,7 @@ do_node_check_slots(PGconn *conn, OutputMode mode, t_node_info *node_info, Check initPQExpBuffer(&details); - if (PQserverVersion(conn) < 90400) - { - appendPQExpBufferStr(&details, - _("replication slots not available for this PostgreSQL version")); - } - else if (node_info->total_replication_slots == 0) + if (node_info->total_replication_slots == 0) { appendPQExpBufferStr(&details, _("node has no physical replication slots")); @@ -1919,50 +1907,42 @@ do_node_check_missing_slots(PGconn *conn, OutputMode mode, t_node_info *node_inf initPQExpBuffer(&details); - if (PQserverVersion(conn) < 90400) + get_downstream_nodes_with_missing_slot(conn, + config_file_options.node_id, + &missing_slots); + + if (missing_slots.node_count == 0) { appendPQExpBufferStr(&details, - _("replication slots not available for this PostgreSQL version")); + _("node has no missing physical replication slots")); } else { - get_downstream_nodes_with_missing_slot(conn, - config_file_options.node_id, - &missing_slots); + NodeInfoListCell *missing_slot_cell = NULL; + bool first_element = true; - if (missing_slots.node_count == 0) + status = CHECK_STATUS_CRITICAL; + + appendPQExpBuffer(&details, + _("%i physical replication slots are missing"), + missing_slots.node_count); + + if (missing_slots.node_count) { - appendPQExpBufferStr(&details, - _("node has no missing physical replication slots")); - } - else - { - NodeInfoListCell *missing_slot_cell = NULL; - bool first_element = true; + appendPQExpBufferStr(&details, ": "); - status = CHECK_STATUS_CRITICAL; - - appendPQExpBuffer(&details, - _("%i physical replication slots are missing"), - missing_slots.node_count); - - if (missing_slots.node_count) + for (missing_slot_cell = missing_slots.head; missing_slot_cell; missing_slot_cell = missing_slot_cell->next) { - appendPQExpBufferStr(&details, ": "); - - for (missing_slot_cell = missing_slots.head; missing_slot_cell; missing_slot_cell = missing_slot_cell->next) + if (first_element == true) { - if (first_element == true) - { - first_element = false; - } - else - { - appendPQExpBufferStr(&details, ", "); - } - - appendPQExpBufferStr(&details, missing_slot_cell->node_info->slot_name); + first_element = false; } + else + { + appendPQExpBufferStr(&details, ", "); + } + + appendPQExpBufferStr(&details, missing_slot_cell->node_info->slot_name); } } } @@ -2557,10 +2537,6 @@ do_node_rejoin(void) /* check provided upstream connection */ upstream_conn = establish_db_connection_by_params(&source_conninfo, true); - /* sanity checks for 9.3 */ - if (PQserverVersion(upstream_conn) < 90400) - check_93_config(); - if (get_primary_node_record(upstream_conn, &primary_node_record) == false) { log_error(_("unable to retrieve primary node record")); diff --git a/repmgr-action-standby.c b/repmgr-action-standby.c index 5049d817..cc7c3866 100644 --- a/repmgr-action-standby.c +++ b/repmgr-action-standby.c @@ -2772,10 +2772,6 @@ do_standby_follow(void) /* check this is a standby */ check_recovery_type(local_conn); - /* sanity-checks for 9.3 */ - if (PQserverVersion(local_conn) < 90400) - check_93_config(); - /* attempt to retrieve local node record */ record_status = get_node_record(local_conn, config_file_options.node_id, @@ -3205,9 +3201,6 @@ do_standby_follow(void) /* * Perform the actuall "follow" operation; this is executed by * "node rejoin" too. - * - * For PostgreSQL 9.3, ensure check_93_config() was called before calling - * this function. */ bool do_standby_follow_internal(PGconn *primary_conn, PGconn *follow_target_conn, t_node_info *follow_target_node_record, PQExpBufferData *output, int general_error_code, int *error_code) @@ -6004,10 +5997,6 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea standy_clone_mode mode; bool pg_setting_ok; - /* Disable configuration file options incompatible with 9.3 */ - if (server_version_num < 90400) - check_93_config(); - /* * Detecting the intended cloning mode */ @@ -6040,13 +6029,6 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea if (strlen(backup_options.wal_method) && strcmp(backup_options.wal_method, "stream") != 0) wal_method_stream = false; - /* Check that WAL level is set correctly */ - if (server_version_num < 90400) - { - i = guc_set(conn, "wal_level", "=", "hot_standby"); - wal_error_message = _("parameter \"wal_level\" must be set to \"hot_standby\""); - } - else { char *levels_pre96[] = { "hot_standby", @@ -6170,14 +6152,10 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea "until the standby has been cloned and started.\n " "Alternatively set up WAL archiving using e.g. PgBarman and configure " "'restore_command' in repmgr.conf to fetch WALs from there.")); - - if (server_version_num >= 90400) - { - log_hint(_("In PostgreSQL 9.4 and later, replication slots can be used, which " - "do not require \"%s\" to be set " - "(set parameter \"use_replication_slots\" in repmgr.conf to enable)\n"), - wal_keep_parameter_name); - } + log_hint(_("In PostgreSQL 9.4 and later, replication slots can be used, which " + "do not require \"%s\" to be set " + "(set parameter \"use_replication_slots\" in repmgr.conf to enable)\n"), + wal_keep_parameter_name); } if (exit_on_error == true) @@ -6199,7 +6177,7 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea } - if (config_file_options.use_replication_slots == false && server_version_num >= 90400) + if (config_file_options.use_replication_slots == false) { log_info(_("replication slot usage not requested; no replication slot will be set up for this standby")); } @@ -6452,30 +6430,17 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea } /* wal_log_hints available from PostgreSQL 9.4; can be read by any user */ - if (PQserverVersion(conn) >= 90400) + if (get_pg_setting_bool(conn, "wal_log_hints", &wal_log_hints) == false) { - if (get_pg_setting_bool(conn, "wal_log_hints", &wal_log_hints) == false) - { - /* highly unlikely this will happen */ - log_error(_("unable to determine value for \"wal_log_hints\"")); - exit(ERR_BAD_CONFIG); - } + /* highly unlikely this will happen */ + log_error(_("unable to determine value for \"wal_log_hints\"")); + exit(ERR_BAD_CONFIG); } if (data_checksums == false && wal_log_hints == false) { - /* - * If anyone's still on 9.3, there's not a lot we can do anyway - */ - if (PQserverVersion(conn) < 90400) - { - log_warning(_("data checksums are not enabled")); - } - else - { - log_warning(_("data checksums are not enabled and \"wal_log_hints\" is \"off\"")); - log_detail(_("pg_rewind requires \"wal_log_hints\" to be enabled")); - } + log_warning(_("data checksums are not enabled and \"wal_log_hints\" is \"off\"")); + log_detail(_("pg_rewind requires \"wal_log_hints\" to be enabled")); } } @@ -6520,67 +6485,60 @@ initialise_direct_clone(t_node_info *local_node_record, t_node_info *upstream_no if (config_file_options.tablespace_mapping.head != NULL) { - if (source_server_version_num < 90400) + TablespaceListCell *cell; + KeyValueList not_found = {NULL, NULL}; + int total = 0, + matched = 0; + bool success = false; + + for (cell = config_file_options.tablespace_mapping.head; cell; cell = cell->next) { - log_warning(_("tablespace mapping not supported in PostgreSQL 9.3, ignoring")); + char *old_dir_escaped = escape_string(source_conn, cell->old_dir); + char name[MAXLEN] = ""; + + success = get_tablespace_name_by_location(source_conn, old_dir_escaped, name); + pfree(old_dir_escaped); + + if (success == true) + { + matched++; + } + else + { + key_value_list_set(¬_found, + cell->old_dir, + ""); + } + + total++; } - else + + if (not_found.head != NULL) { - TablespaceListCell *cell; - KeyValueList not_found = {NULL, NULL}; - int total = 0, - matched = 0; - bool success = false; + PQExpBufferData detail; + KeyValueListCell *kv_cell; + log_error(_("%i of %i mapped tablespaces not found"), + total - matched, total); - for (cell = config_file_options.tablespace_mapping.head; cell; cell = cell->next) + initPQExpBuffer(&detail); + + for (kv_cell = not_found.head; kv_cell; kv_cell = kv_cell->next) { - char *old_dir_escaped = escape_string(source_conn, cell->old_dir); - char name[MAXLEN] = ""; - - success = get_tablespace_name_by_location(source_conn, old_dir_escaped, name); - pfree(old_dir_escaped); - - if (success == true) - { - matched++; - } - else - { - key_value_list_set(¬_found, - cell->old_dir, - ""); - } - - total++; + appendPQExpBuffer( + &detail, + " %s\n", kv_cell->key); } - if (not_found.head != NULL) - { - PQExpBufferData detail; - KeyValueListCell *kv_cell; + log_detail(_("following tablespaces not found:\n%s"), + detail.data); + termPQExpBuffer(&detail); - log_error(_("%i of %i mapped tablespaces not found"), - total - matched, total); - - initPQExpBuffer(&detail); - - for (kv_cell = not_found.head; kv_cell; kv_cell = kv_cell->next) - { - appendPQExpBuffer( - &detail, - " %s\n", kv_cell->key); - } - - log_detail(_("following tablespaces not found:\n%s"), - detail.data); - termPQExpBuffer(&detail); - - exit(ERR_BAD_CONFIG); - } + exit(ERR_BAD_CONFIG); } } + /* * If replication slots requested, create appropriate slot on the source * node; this must be done before pg_basebackup is called. diff --git a/repmgr-client-global.h b/repmgr-client-global.h index 0d59f917..bf1429f2 100644 --- a/repmgr-client-global.h +++ b/repmgr-client-global.h @@ -252,7 +252,6 @@ extern char pg_bindir[MAXLEN]; /* global functions */ extern int check_server_version(PGconn *conn, char *server_type, bool exit_on_error, char *server_version_string); -extern void check_93_config(void); extern bool create_repmgr_extension(PGconn *conn); extern int test_ssh_connection(char *host, char *remote_user); diff --git a/repmgr-client.c b/repmgr-client.c index 344ed67d..38ca3709 100644 --- a/repmgr-client.c +++ b/repmgr-client.c @@ -2923,30 +2923,6 @@ check_server_version(PGconn *conn, char *server_type, bool exit_on_error, char * } - -/* - * check_93_config() - * - * Disable options not compatible with PostgreSQL 9.3 - */ -void -check_93_config(void) -{ - if (config_file_options.recovery_min_apply_delay_provided == true) - { - config_file_options.recovery_min_apply_delay_provided = false; - log_warning(_("configuration file option \"recovery_min_apply_delay\" not compatible with PostgreSQL 9.3, ignoring")); - } - - if (config_file_options.use_replication_slots == true) - { - config_file_options.use_replication_slots = false; - log_warning(_("configuration file option \"use_replication_slots\" not compatible with PostgreSQL 9.3, ignoring")); - log_hint(_("replication slots are available from PostgreSQL 9.4")); - } -} - - int test_ssh_connection(char *host, char *remote_user) { @@ -3138,15 +3114,12 @@ copy_remote_files(char *host, char *remote_user, char *remote_path, appendPQExpBufferStr(&rsync_flags, " --exclude=recovery.conf --exclude=recovery.done"); - if (server_version_num >= 90400) - { - /* - * Ideally we'd use PG_AUTOCONF_FILENAME from utils/guc.h, but - * that has too many dependencies for a mere client program. - */ - appendPQExpBuffer(&rsync_flags, " --exclude=%s.tmp", - PG_AUTOCONF_FILENAME); - } + /* + * Ideally we'd use PG_AUTOCONF_FILENAME from utils/guc.h, but + * that has too many dependencies for a mere client program. + */ + appendPQExpBuffer(&rsync_flags, " --exclude=%s.tmp", + PG_AUTOCONF_FILENAME); /* Temporary files which we don't want, if they exist */ appendPQExpBuffer(&rsync_flags, " --exclude=%s*", @@ -3599,27 +3572,6 @@ can_use_pg_rewind(PGconn *conn, const char *data_directory, PQExpBufferData *rea { bool can_use = true; - /* wal_log_hints not available in 9.3, so just determine if data checksums enabled */ - if (PQserverVersion(conn) < 90400) - { - int data_checksum_version = get_data_checksum_version(data_directory); - - if (data_checksum_version < 0) - { - appendPQExpBuffer(reason, - _("unable to determine data checksum version")); - can_use = false; - } - else if (data_checksum_version == 0) - { - appendPQExpBuffer(reason, - _("this cluster was initialised without data checksums")); - can_use = false; - } - - return can_use; - } - /* "full_page_writes" must be on in any case */ if (guc_set(conn, "full_page_writes", "=", "off")) { diff --git a/repmgr.c b/repmgr.c index c5f5ab0e..ab1efda2 100644 --- a/repmgr.c +++ b/repmgr.c @@ -33,22 +33,14 @@ #include "storage/shmem.h" #include "storage/spin.h" #include "utils/builtins.h" - -#if (PG_VERSION_NUM >= 90400) #include "utils/pg_lsn.h" -#endif #include "utils/timestamp.h" #include "lib/stringinfo.h" #include "access/xact.h" #include "utils/snapmgr.h" - -#if (PG_VERSION_NUM >= 90400) #include "pgstat.h" -#else -#define PGSTAT_STAT_PERMANENT_DIRECTORY "pg_stat" -#endif #include "voting.h" diff --git a/repmgr.h b/repmgr.h index 8735aa21..129eeda2 100644 --- a/repmgr.h +++ b/repmgr.h @@ -74,8 +74,8 @@ #include "log.h" #include "sysutils.h" -#define MIN_SUPPORTED_VERSION "9.3" -#define MIN_SUPPORTED_VERSION_NUM 90300 +#define MIN_SUPPORTED_VERSION "9.4" +#define MIN_SUPPORTED_VERSION_NUM 90400 #define REPLICATION_TYPE_PHYSICAL 1