]> 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 d3a4a50005b77a3b2e469a92952e4d0d0931f6f7..998f2c321e3745dd8fe267c93c1b40b08223f92e 100644 (file)
@@ -340,7 +340,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 73c06a043ed24e2e98956dcf00b43af52c55ca96..6f0baa7e7c1950822f8e3b3dbbdb697893f66883 100644 (file)
@@ -130,7 +130,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 c04f417cf053b424fc83e53c53e68f7677f5010b..4f924b5741da6170c2af557f0e673231658dc422 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 bf32638b6fdba3a7178c0b9d5b7a5a17ba014fe0..79b983b4ef51640953b0cb41869a81eb630ff8f2 100644 (file)
@@ -1206,7 +1206,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;
        }
@@ -5678,7 +5678,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);
        }