]> granicus.if.org Git - postgresql/commitdiff
Revert "Fix bug in checking of IDENTIFY_SYSTEM result."
authorFujii Masao <fujii@postgresql.org>
Tue, 19 Aug 2014 09:30:38 +0000 (18:30 +0900)
committerFujii Masao <fujii@postgresql.org>
Tue, 19 Aug 2014 09:33:17 +0000 (18:33 +0900)
This reverts commit 083d29c65b7897f90c70e6dc0a4240a5fa75c8f2.

The commit changed the code so that it causes an errors when
IDENTIFY_SYSTEM returns three columns. But which prevents us
from using the replication-related utilities against the server
with older version. This is not what we want. For that
compatibility, we allow the utilities to receive three columns
as the result of IDENTIFY_SYSTEM eventhough it actually returns
four columns in 9.4 or later.

Pointed out by Andres Freund.

src/backend/replication/libpqwalreceiver/libpqwalreceiver.c
src/bin/pg_basebackup/pg_basebackup.c
src/bin/pg_basebackup/pg_receivexlog.c
src/bin/pg_basebackup/receivelog.c

index 7049f12296bf9f2659a296fdaa406bb42c52d6ec..65e95c59f02f9b88cfc07b43eb88bc607e12a7d8 100644 (file)
@@ -131,7 +131,7 @@ libpqrcv_identify_system(TimeLineID *primary_tli)
                                                "the primary server: %s",
                                                PQerrorMessage(streamConn))));
        }
-       if (PQnfields(res) < 4 || PQntuples(res) != 1)
+       if (PQnfields(res) < 3 || PQntuples(res) != 1)
        {
                int                     ntuples = PQntuples(res);
                int                     nfields = PQnfields(res);
@@ -140,7 +140,7 @@ libpqrcv_identify_system(TimeLineID *primary_tli)
                ereport(ERROR,
                                (errmsg("invalid response from primary server"),
                                 errdetail("Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields.",
-                                                  ntuples, nfields, 4, 1)));
+                                                  ntuples, nfields, 3, 1)));
        }
        primary_sysid = PQgetvalue(res, 0, 0);
        *primary_tli = pg_atoi(PQgetvalue(res, 0, 1), 4, 0);
index 4d6e6c08a02165ff7831a1baf4f6930e6c3206a2..85f18a89820a672a12887f4a9990ba8c6d056df0 100644 (file)
@@ -1644,11 +1644,11 @@ BaseBackup(void)
                                progname, "IDENTIFY_SYSTEM", PQerrorMessage(conn));
                disconnect_and_exit(1);
        }
-       if (PQntuples(res) != 1 || PQnfields(res) < 4)
+       if (PQntuples(res) != 1 || PQnfields(res) < 3)
        {
                fprintf(stderr,
                                _("%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n"),
-                               progname, PQntuples(res), PQnfields(res), 1, 4);
+                               progname, PQntuples(res), PQnfields(res), 1, 3);
                disconnect_and_exit(1);
        }
        sysidentifier = pg_strdup(PQgetvalue(res, 0, 0));
index 05e5087f610393b2406e4ca9d506c5ddaa30d44b..ba635f2b86fbbfe0da11982032a9e88ef757a69d 100644 (file)
@@ -287,11 +287,11 @@ StreamLog(void)
                                progname, "IDENTIFY_SYSTEM", PQerrorMessage(conn));
                disconnect_and_exit(1);
        }
-       if (PQntuples(res) != 1 || PQnfields(res) < 4)
+       if (PQntuples(res) != 1 || PQnfields(res) < 3)
        {
                fprintf(stderr,
                                _("%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n"),
-                               progname, PQntuples(res), PQnfields(res), 1, 4);
+                               progname, PQntuples(res), PQnfields(res), 1, 3);
                disconnect_and_exit(1);
        }
        servertli = atoi(PQgetvalue(res, 0, 1));
index 7c67d06cf6348ca0bf28c6ce63c49c4a5a845d30..8f360ec3e4607003a85863d974b75832eb5d9bb6 100644 (file)
@@ -472,11 +472,11 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
                        PQclear(res);
                        return false;
                }
-               if (PQntuples(res) != 1 || PQnfields(res) < 4)
+               if (PQntuples(res) != 1 || PQnfields(res) < 3)
                {
                        fprintf(stderr,
                                        _("%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n"),
-                                       progname, PQntuples(res), PQnfields(res), 1, 4);
+                                       progname, PQntuples(res), PQnfields(res), 1, 3);
                        PQclear(res);
                        return false;
                }