diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 5b4d54a442..80b81e811d 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3041,8 +3041,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(); } } @@ -3056,7 +3062,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; @@ -3131,7 +3138,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 26bf613c1d..9b5b843960 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -423,13 +423,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;