Report the true database name on connection errors

When reporting connection errors, we might show a database name in the
message that's not the one we actually tried to connect to, if the
database was taken from libpq defaults instead of from user parameters.
Fix such error messages to use PQdb(), which reports the correct name.

(But, per commit 2930c05634, make sure not to try to print NULL.)

Apply to branches 9.5 through 13.  Branch master has already been
changed differently by commit 58cd8dca3d.

Reported-by: Robert Haas <robertmhaas@gmail.com>
Discussion: https://postgr.es/m/CA+TgmobssJ6rS22dspWnu-oDxXevGmhMD8VcRBjmj-b9UDqRjw@mail.gmail.com
This commit is contained in:
Alvaro Herrera 2021-01-26 16:42:13 -03:00
parent 131825cd50
commit f2dc962360
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE
4 changed files with 6 additions and 5 deletions

View File

@ -319,7 +319,7 @@ sql_conn(struct options * my_opts)
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "%s: could not connect to database %s: %s",
"oid2name", my_opts->dbname, PQerrorMessage(conn));
"oid2name", PQdb(conn) ? PQdb(conn) : "", PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}

View File

@ -124,7 +124,7 @@ vacuumlo(const char *database, const struct _param * param)
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database \"%s\" failed:\n%s",
database, PQerrorMessage(conn));
PQdb(conn) ? PQdb(conn) : "", PQerrorMessage(conn));
PQfinish(conn);
return -1;
}

View File

@ -1954,7 +1954,7 @@ connectDatabase(const char *dbname, const char *connection_string,
{
fprintf(stderr,
_("%s: could not connect to database \"%s\": %s"),
progname, dbname, PQerrorMessage(conn));
progname, PQdb(conn) ? PQdb(conn) : "", PQerrorMessage(conn));
exit_nicely(1);
}
else

View File

@ -686,7 +686,7 @@ doConnect(void)
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "connection to database \"%s\" failed:\n%s",
dbName, PQerrorMessage(conn));
PQdb(conn), PQerrorMessage(conn));
PQfinish(conn);
return NULL;
}
@ -3312,7 +3312,8 @@ main(int argc, char **argv)
if (PQstatus(con) == CONNECTION_BAD)
{
fprintf(stderr, "connection to database \"%s\" failed\n", dbName);
fprintf(stderr, "connection to database \"%s\" failed\n",
PQdb(con) ? PQdb(con) : "");
fprintf(stderr, "%s", PQerrorMessage(con));
exit(1);
}