mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Fix incorrect error message for IDENTIFY_SYSTEM
Commit 5a991ef8692e accidentally reversed the order of the tuples and fields parameters, making the error message incorrectly refer to 3 tuples with 1 field when IDENTIFY_SYSTEM returns 1 tuple and 3 or 4 fields. Fix by changing the order of the parameters. This also adds a comment describing why we check for < 3 when postgres since 9.4 has been sending 4 fields. Backpatch all the way since the bug is almost a decade old. Author: Tomonari Katsumata <t.katsumata1122@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Bug: #18224 Backpatch-through: v12
This commit is contained in:
parent
f896818167
commit
376eaa45a2
@ -360,6 +360,10 @@ libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli)
|
|||||||
"the primary server: %s",
|
"the primary server: %s",
|
||||||
pchomp(PQerrorMessage(conn->streamConn)))));
|
pchomp(PQerrorMessage(conn->streamConn)))));
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* IDENTIFY_SERVER returns 3 columns in 9.3 and earlier, and 4 columns in
|
||||||
|
* 9.4 and onwards.
|
||||||
|
*/
|
||||||
if (PQnfields(res) < 3 || PQntuples(res) != 1)
|
if (PQnfields(res) < 3 || PQntuples(res) != 1)
|
||||||
{
|
{
|
||||||
int ntuples = PQntuples(res);
|
int ntuples = PQntuples(res);
|
||||||
@ -370,7 +374,7 @@ libpqrcv_identify_system(WalReceiverConn *conn, TimeLineID *primary_tli)
|
|||||||
(errcode(ERRCODE_PROTOCOL_VIOLATION),
|
(errcode(ERRCODE_PROTOCOL_VIOLATION),
|
||||||
errmsg("invalid response from primary server"),
|
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.",
|
errdetail("Could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields.",
|
||||||
ntuples, nfields, 3, 1)));
|
ntuples, nfields, 1, 3)));
|
||||||
}
|
}
|
||||||
primary_sysid = pstrdup(PQgetvalue(res, 0, 0));
|
primary_sysid = pstrdup(PQgetvalue(res, 0, 0));
|
||||||
*primary_tli = pg_strtoint32(PQgetvalue(res, 0, 1));
|
*primary_tli = pg_strtoint32(PQgetvalue(res, 0, 1));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user