summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c18
-rw-r--r--src/bin/pg_basebackup/pg_receivexlog.c18
2 files changed, 36 insertions, 0 deletions
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index bddd3718d44..19cc9e864e3 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -947,6 +947,9 @@ BaseBackup(void)
int i;
char xlogstart[64];
char xlogend[64];
+ int minServerMajor,
+ maxServerMajor;
+ int serverMajor;
/*
* Connect in replication mode to the server
@@ -957,6 +960,21 @@ BaseBackup(void)
exit(1);
/*
+ * Check server version. BASE_BACKUP command was introduced in 9.1, so
+ * we can't work with servers older than 9.1. And we don't support servers
+ * newer than the client.
+ */
+ minServerMajor = 901;
+ maxServerMajor = PG_VERSION_NUM / 100;
+ serverMajor = PQserverVersion(conn) / 100;
+ if (serverMajor < minServerMajor || serverMajor > maxServerMajor)
+ {
+ fprintf(stderr, _("%s: unsupported server version %s\n"),
+ progname, PQparameterStatus(conn, "server_version"));
+ disconnect_and_exit(1);
+ }
+
+ /*
* Run IDENTIFY_SYSTEM so we can get the timeline
*/
res = PQexec(conn, "IDENTIFY_SYSTEM");
diff --git a/src/bin/pg_basebackup/pg_receivexlog.c b/src/bin/pg_basebackup/pg_receivexlog.c
index 4d91addc56d..b7df693f2dd 100644
--- a/src/bin/pg_basebackup/pg_receivexlog.c
+++ b/src/bin/pg_basebackup/pg_receivexlog.c
@@ -220,6 +220,9 @@ StreamLog(void)
PGresult *res;
uint32 timeline;
XLogRecPtr startpos;
+ int minServerMajor,
+ maxServerMajor;
+ int serverMajor;
/*
* Connect in replication mode to the server
@@ -230,6 +233,21 @@ StreamLog(void)
return;
/*
+ * Check server version. IDENTIFY_SYSTEM didn't return the current xlog
+ * position before 9.1, so we can't work with servers older than 9.1. And
+ * we don't support servers newer than the client.
+ */
+ minServerMajor = 901;
+ maxServerMajor = PG_VERSION_NUM / 100;
+ serverMajor = PQserverVersion(conn) / 100;
+ if (serverMajor < minServerMajor || serverMajor > maxServerMajor)
+ {
+ fprintf(stderr, _("%s: unsupported server version %s\n"),
+ progname, PQparameterStatus(conn, "server_version"));
+ disconnect_and_exit(1);
+ }
+
+ /*
* Run IDENTIFY_SYSTEM so we can get the timeline and current xlog
* position.
*/