On Wed, Sep 14, 2011 at 10:52:50PM -0500, Robert Haas wrote:
> On Thu, Sep 8, 2011 at 5:09 AM, Peter Eisentraut <pete...@gmx.net> wrote:
> > On tis, 2011-09-06 at 17:12 +0200, hubert depesz lubaczewski wrote:
> >> On Mon, Sep 05, 2011 at 02:27:23PM -0400, Tom Lane wrote:
> >> > It's not just the port, it's all the connection parameters ---
> >> > do_connect relies on the PGconn object to remember those, and in this
> >> > case there no longer is a PGconn object.
> >> >
> >> > We could have psql keep that information separately, but I'm not sure
> >> > it's really worth the trouble.
> >>
> >> well, I think it's definitely worth the trouble. If I had datbaase
> >> standing at 5432, it would connect to it, and then I could mistakenly
> >> ran commands to wrong database.
> >> this is clearly not a good thing.
> >
> > Perhaps just prevent \connect without argument if the information is no
> > longer available.
> 
> I think it'd be worth actually having psql maintain the information
> separately from the PGconn... but if nobody feels motivated to go do
> that, doing at least this much would remove the foot-gun.  So +1 for
> that.

OK, I have applied the attached, applied patch to do as you suggest.

Here are examples:

        !> SELECT * FROM mytable WHERE to_ascii(convert_to(mytext, 'latin1'), 
'latin1')
        -> = to_ascii(convert_to('nicetry', 'latin1'), 'latin1');
        You are currently not connected to a database.
        !> \c
        All connection parameters must be supplied because no database 
connection exists
        !> \q
        $ psql -p 5433 test
        psql (9.3devel)
        Type "help" for help.
        
        test=> \c
        You are now connected to database "test" as user "postgres".
        test=> \q

-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
new file mode 100644
index 6ead800..2cd3ab4
*** a/src/bin/psql/command.c
--- b/src/bin/psql/command.c
*************** do_connect(char *dbname, char *user, cha
*** 1512,1517 ****
--- 1512,1523 ----
  			   *n_conn;
  	char	   *password = NULL;
  
+ 	if (!o_conn && (!dbname || !user || !host || !port))
+ 	{
+ 		fputs(_("All connection parameters must be supplied because no database connection exists\n"), stderr);
+ 		return false;
+ 	}
+ 
  	if (!dbname)
  		dbname = PQdb(o_conn);
  	if (!user)
-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to