From fdd405c63fff4e3d0215f1d41b1ef58361dc81dc Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 26 Jan 2021 16:42:13 -0300 Subject: [PATCH] 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 2930c05634bc, make sure not to try to print NULL.) Apply to branches 9.5 through 13. Branch master has already been changed differently by commit 58cd8dca3de0. Reported-by: Robert Haas Discussion: https://postgr.es/m/CA+TgmobssJ6rS22dspWnu-oDxXevGmhMD8VcRBjmj-b9UDqRjw@mail.gmail.com --- contrib/oid2name/oid2name.c | 2 +- contrib/vacuumlo/vacuumlo.c | 2 +- src/bin/pg_dump/pg_dumpall.c | 2 +- src/bin/pgbench/pgbench.c | 5 +++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/contrib/oid2name/oid2name.c b/contrib/oid2name/oid2name.c index 63e360c4c56..07a5e422fed 100644 --- a/contrib/oid2name/oid2name.c +++ b/contrib/oid2name/oid2name.c @@ -320,7 +320,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); } diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index fc7e8369834..a5150c907a5 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -129,7 +129,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; } diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 843eca984f7..d6f59f4d606 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -1681,7 +1681,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 diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index 0a7a3b29a82..e28726ef1f9 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -1163,7 +1163,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; } @@ -5410,7 +5410,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); } -- 2.39.5