]> granicus.if.org Git - postgresql/commitdiff
Give a proper error message if connecting to incompatible server.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 15 Jan 2013 13:45:52 +0000 (15:45 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Tue, 15 Jan 2013 13:45:52 +0000 (15:45 +0200)
The WAL streaming message format changed in 9.3, so 9.3 pg_basebackup or
pg_receivelog won't work against older servers.

src/bin/pg_basebackup/receivelog.c

index cf9cea1e2df8eb23b78d095898140c92e98e37ad..88d0c136b07cbe5e155ee8d402584e401c177bb3 100644 (file)
@@ -342,6 +342,21 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
        int64           last_status = -1;
        XLogRecPtr      blockpos = InvalidXLogRecPtr;
 
+       /*
+        * The message format used in streaming replication changed in 9.3, so we
+        * cannot stream from older servers. Don't know if we would work with
+        * newer versions, but let's not take the risk.
+        */
+       if (PQserverVersion(conn) / 100 != PG_VERSION_NUM / 100)
+       {
+               const char *serverver = PQparameterStatus(conn, "server_version");
+               fprintf(stderr, _("%s: incompatible server version %s; streaming is only supported with server version %s\n"),
+                               progname,
+                               serverver ? serverver : "'unknown'",
+                               PG_MAJORVERSION);
+               return false;
+       }
+
        if (sysidentifier != NULL)
        {
                /* Validate system identifier and timeline hasn't changed */