diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index a30a5f8ea0a..9c825807ad2 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3157,8 +3157,14 @@ do_connect(enum trivalue reuse_previous_specification, psql_error("\\connect: %s", PQerrorMessage(n_conn)); if (o_conn) { + /* + * Transition to having no connection. Keep this bit in sync + * with CheckConnection(). + */ PQfinish(o_conn); pset.db = NULL; + ResetCancelConn(); + UnsyncVariables(); } } @@ -3172,7 +3178,8 @@ do_connect(enum trivalue reuse_previous_specification, /* * Replace the old connection with the new one, and update - * connection-dependent variables. + * connection-dependent variables. Keep the resynchronization logic in + * sync with CheckConnection(). */ PQsetNoticeProcessor(n_conn, NoticeProcessor, NULL); pset.db = n_conn; @@ -3247,7 +3254,8 @@ connection_warnings(bool in_startup) sverbuf, sizeof(sverbuf))); #ifdef WIN32 - checkWin32Codepage(); + if (in_startup) + checkWin32Codepage(); #endif printSSLInfo(); } diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index f61082b9d30..d04a7943d6a 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -422,13 +422,27 @@ CheckConnection(void) if (!OK) { psql_error("Failed.\n"); + + /* + * Transition to having no connection. Keep this bit in sync with + * do_connect(). + */ PQfinish(pset.db); pset.db = NULL; ResetCancelConn(); UnsyncVariables(); } else + { psql_error("Succeeded.\n"); + + /* + * Re-sync, just in case anything changed. Keep this in sync with + * do_connect(). + */ + SyncVariables(); + connection_warnings(false); /* Must be after SyncVariables */ + } } return OK;