Report the true database name on connection errors
authorAlvaro Herrera <[email protected]>
Tue, 26 Jan 2021 19:42:13 +0000 (16:42 -0300)
committerAlvaro Herrera <[email protected]>
Tue, 26 Jan 2021 19:42:13 +0000 (16:42 -0300)
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 <[email protected]>
Discussion: https://postgr.es/m/CA+TgmobssJ6rS22dspWnu-oDxXevGmhMD8VcRBjmj-b9UDqRjw@mail.gmail.com

contrib/oid2name/oid2name.c
contrib/vacuumlo/vacuumlo.c
src/bin/pg_dump/pg_dumpall.c
src/bin/pgbench/pgbench.c

index 91da40352b4bacd745bdb196ee6edc3bb174b4df..69671129c2fe6d7f1cdb92f4dab689f4fc628f8e 100644 (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);
    }
index 28f86175e953dfec6d434603977663c7c36dbb91..47654ba869e82098a976d0a46df29e7a6a36bfae 100644 (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;
    }
index 81161c3133b6652de563f1dd2c4e7443d46b9fce..0b9f038f8515d2fae0ac2bd2eca5d32e7ebb0a79 100644 (file)
@@ -2088,7 +2088,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
index 2ccab93fbe8298a1fa89b329c05de3c42fbb4236..6ff0628c7bda65b5986c53469ea5951d4630147c 100644 (file)
@@ -828,7 +828,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;
    }
@@ -3913,7 +3913,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);
    }