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 0f79b139cfb154edd08abeefd94881359b62fa51..5788c17674c619d18d8a2642f711a6d92ca6ca48 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 e30bb85b3b4fedb613c37e0427d6682705e88aad..20cef1b47533b19acbd59b07f1a37a889b643907 100644 (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
index b08121c905eb524b42013ef0a856e4defe95564d..875b764fa9e75fd4d2b33d7e4314e5b29c5cb96c 100644 (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);
    }