postgresql/src/bin
Tom Lane 20be76d5c4 Fix connection string handling in psql's \connect command.
psql's \connect claims to be able to re-use previous connection
parameters, but in fact it only re-uses the database name, user name,
host name (and possibly hostaddr, depending on version), and port.
This is problematic for assorted use cases.  Notably, pg_dump[all]
emits "\connect databasename" commands which we would like to have
re-use all other parameters.  If such a script is loaded in a psql run
that initially had "-d connstring" with some non-default parameters,
those other parameters would be lost, potentially causing connection
failure.  (Thus, this is the same kind of bug addressed in commits
a45bc8a4f and 8e5793ab6, although the details are much different.)

To fix, redesign do_connect() so that it pulls out all properties
of the old PGconn using PQconninfo(), and then replaces individual
properties in that array.  In the case where we don't wish to re-use
anything, get libpq's default settings using PQconndefaults() and
replace entries in that, so that we don't need different code paths
for the two cases.

This does result in an additional behavioral change for cases where
the original connection parameters allowed multiple hosts, say
"psql -h host1,host2", and the \connect request allows re-use of the
host setting.  Because the previous coding relied on PQhost(), it
would only permit reconnection to the same host originally selected.
Although one can think of scenarios where that's a good thing, there
are others where it is not.  Moreover, that behavior doesn't seem to
meet the principle of least surprise, nor was it documented; nor is
it even clear it was intended, since that coding long pre-dates the
addition of multi-host support to libpq.  Hence, this patch is content
to drop it and re-use the host list as given.

Per Peter Eisentraut's comments on bug #16604.  Back-patch to all
supported branches.

Discussion: https://postgr.es/m/16604-933f4b8791227b15@postgresql.org
2020-10-21 16:19:01 -04:00
..
initdb Translation updates 2020-08-10 15:27:40 +02:00
pg_archivecleanup Translation updates 2020-08-10 15:27:40 +02:00
pg_basebackup Translation updates 2020-08-10 15:27:40 +02:00
pg_config Translation updates 2020-08-10 15:27:40 +02:00
pg_controldata Translation updates 2020-08-10 15:27:40 +02:00
pg_ctl Translation updates 2020-08-10 15:27:40 +02:00
pg_dump In libpq for Windows, call WSAStartup once and WSACleanup not at all. 2020-10-19 11:23:52 -04:00
pg_resetwal Translation updates 2020-08-10 15:27:40 +02:00
pg_rewind Remove useless lstat() call in pg_rewind. 2020-09-06 11:50:41 -04:00
pg_test_fsync Translation updates 2020-08-10 15:27:40 +02:00
pg_test_timing Translation updates 2020-08-10 15:27:40 +02:00
pg_upgrade pg_upgrade: remove C99 compiler req. from commit 3c0471b5fd 2020-10-15 20:37:19 -04:00
pg_verify_checksums Translation updates 2020-08-10 15:27:40 +02:00
pg_waldump Translation updates 2020-08-10 15:27:40 +02:00
pgbench Fix integer-overflow edge case detection in interval_mul and pgbench. 2019-11-07 11:23:00 -05:00
pgevent Update copyright for 2018 2018-01-02 23:30:12 -05:00
psql Fix connection string handling in psql's \connect command. 2020-10-21 16:19:01 -04:00
scripts Fix connection string handling in src/bin/scripts/ programs. 2020-10-19 19:03:47 -04:00
Makefile Allow on-line enabling and disabling of data checksums 2018-04-05 22:04:48 +02:00