]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
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 63e360c4c56d831d728d5828cb3a3c0e3b357b62..07a5e422fedf7c558aab757d46eeccd1ae43b8eb 100644 (file)
@@ -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);
        }
index fc7e8369834980d48352911a815794675dabbcaf..a5150c907a5be059423bdc378253467e8216f0a4 100644 (file)
@@ -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;
        }
index 843eca984f73b83937bc940af7516b343f6cc583..d6f59f4d6065e386f977fa0a2f01c668265d3a0d 100644 (file)
@@ -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
index 0a7a3b29a822ffc107fdf45e479052b58f1b1a41..e28726ef1f91caf13a58cbf8c1215d704be018e6 100644 (file)
@@ -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);
        }