diff options
author | Fujii Masao <fujii@postgresql.org> | 2021-12-03 17:35:29 +0900 |
---|---|---|
committer | Fujii Masao <fujii@postgresql.org> | 2021-12-03 17:37:14 +0900 |
commit | f89015b63f532063560ef78bc1d0d8c166173c6d (patch) | |
tree | eaea73bd2ff72df0d6f0c2460a8329a7a859c181 /contrib/postgres_fdw/connection.c | |
parent | 6251f86241acd05facefc4b4caacc9430b059d58 (diff) |
postgres_fdw: Fix unexpected reporting of empty message.
pgfdw_report_error() in postgres_fdw gets a message from PGresult or
PGconn to report an error received from a remote server. Previously
if it could get a message from neither of them, it reported empty
message unexpectedly. The cause of this issue was that pgfdw_report_error()
didn't handle properly the case where no message could be obtained
and its local variable message_primary was set to '\0'.
This commit improves pgfdw_report_error() so that it reports the message
"could not obtain ..." when it gets no message and message_primary
is set to '\0'. This is the same behavior as when message_primary is NULL.
dblink_res_error() in dblink has the same issue, so this commit also
improves it in the same way.
Back-patch to all supported branches.
Author: Fujii Masao
Reviewed-by: Bharath Rupireddy
Discussion: https://postgr.es/m/477c16c8-7ea4-20fc-38d5-ed3a77ed616c@oss.nttdata.com
Diffstat (limited to 'contrib/postgres_fdw/connection.c')
-rw-r--r-- | contrib/postgres_fdw/connection.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c index 2e5d78d100d..a23064a2c80 100644 --- a/contrib/postgres_fdw/connection.c +++ b/contrib/postgres_fdw/connection.c @@ -685,7 +685,8 @@ pgfdw_report_error(int elevel, PGresult *res, PGconn *conn, ereport(elevel, (errcode(sqlstate), - message_primary ? errmsg_internal("%s", message_primary) : + (message_primary != NULL && message_primary[0] != '\0') ? + errmsg_internal("%s", message_primary) : errmsg("could not obtain message string for remote error"), message_detail ? errdetail_internal("%s", message_detail) : 0, message_hint ? errhint("%s", message_hint) : 0, |