Report the true database name on connection errors
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 26 Jan 2021 19:42:13 +0000 (16:42 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
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 <robertmhaas@gmail.com>
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 91b7958c48efa0bef027688a4b5651fc62faf3ad..60972fea719b4cc3d94ebd04dbcd3c7c5dc61085 100644 (file)
@@ -348,8 +348,8 @@ sql_conn(struct options *my_opts)
    /* check to see that the backend connection was successfully made */
    if (PQstatus(conn) == CONNECTION_BAD)
    {
-       pg_log_error("could not connect to database %s: %s",
-                    my_opts->dbname, PQerrorMessage(conn));
+       pg_log_error("could not connect to database \"%s\": %s",
+                    PQdb(conn) ? PQdb(conn) : "", PQerrorMessage(conn));
        PQfinish(conn);
        exit(1);
    }
index e4019fafaa9e7cc5d2ce1415d57089dd4b988082..0641885439adb22807fe6c88714a4c9f2194b219 100644 (file)
@@ -129,7 +129,7 @@ vacuumlo(const char *database, const struct _param *param)
    if (PQstatus(conn) == CONNECTION_BAD)
    {
        pg_log_error("connection to database \"%s\" failed: %s",
-                    database, PQerrorMessage(conn));
+                    PQdb(conn) ? PQdb(conn) : "", PQerrorMessage(conn));
        PQfinish(conn);
        return -1;
    }
index 2c82b39af0d27bdae33eae3c336d7126ccf4e6c2..0bc74da9cfb2e13c5a8ab1752eb341308b7e3d97 100644 (file)
@@ -1773,7 +1773,7 @@ connectDatabase(const char *dbname, const char *connection_string,
        if (fail_on_error)
        {
            pg_log_error("could not connect to database \"%s\": %s",
-                        dbname, PQerrorMessage(conn));
+                        PQdb(conn) ? PQdb(conn) : "", PQerrorMessage(conn));
            exit_nicely(1);
        }
        else
index 768218565db8803d782578c687af079e43d527c9..84e3aa9ece5fe53384cebc1486089d111f12813f 100644 (file)
@@ -1228,7 +1228,7 @@ doConnect(void)
    if (PQstatus(conn) == CONNECTION_BAD)
    {
        pg_log_error("connection to database \"%s\" failed: %s",
-                    dbName, PQerrorMessage(conn));
+                    PQdb(conn), PQerrorMessage(conn));
        PQfinish(conn);
        return NULL;
    }
@@ -6047,7 +6047,7 @@ main(int argc, char **argv)
    if (PQstatus(con) == CONNECTION_BAD)
    {
        pg_log_fatal("connection to database \"%s\" failed: %s",
-                    dbName, PQerrorMessage(con));
+                    PQdb(con) ? PQdb(con) : "", PQerrorMessage(con));
        exit(1);
    }