Skip site navigation (1) Skip section navigation (2)

Re: Separate psql commands from arguments (was: psql command aliases support)

From: Bernd Helmle <mailings(at)oopsware(dot)de>
To: Brendan Jurd <direvus(at)gmail(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgresql(dot)org
Cc: Gregory Stark <stark(at)enterprisedb(dot)com>, Peter Eisentraut <peter_e(at)gmx(dot)net>
Subject: Re: Separate psql commands from arguments (was: psql command aliases support)
Date: 2008-04-03 19:35:22
Message-ID: F8043B20EB397B941789CFDC@imhotep.credativ.de (view raw or flat)
Thread:
Lists: pgsql-hackers
--On Freitag, April 04, 2008 05:04:04 +1100 Brendan Jurd 
<direvus(at)gmail(dot)com> wrote:

For everyone else who hasn't read the original discussion on -patches, 
here's a link into the archives:

<http://archives.postgresql.org/pgsql-patches/2008-04/msg00005.php>

>
> On Fri, Apr 4, 2008 at 4:19 AM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>>  Yeah, the fundamental difference between the backslash command situation
>>  and aliases in shells and suchlike is that, because we've historically
>>  allowed no space between command name and argument, it's not that easy
>>  to tell what string ought to be compared against alias names.
>>
>>  I think that an alias facility would only be acceptably safe if we
>>  disallowed that syntax (ie, start to *require* a space between command
>>  and args).  Are we ready to do that?
>>

Okay, the more we talked about that, the more i got that feeling, too.

>
> As far as i know, this behaviour isn't documented anywhere.  In fact,
> the manual denies its existence:
>
>     "The format of a psql command is the backslash, followed
> immediately by a command verb, then any arguments. The arguments are
> separated from the command verb and each other by any number of
> whitespace characters."
>

Not only there, the code itself  doesn't encourage the use of this syntax 
(src/bin/psql/command.c), too:


                /*
                 * If the command was not recognized, try to parse it as a 
one-letter
                 * command with immediately following argument (a 
still-supported, but
                 * no longer encouraged, syntax).
                 */

> (unless you interpret "any number" to include zero, but that's quite a
> stretch in this context)
>
> For what it's worth, I've been using Postgres actively for about five
> years, and I've not once suspected that it was possible to omit the
> space between a psql command and its argument.
>
> The idea of writing the command and its arguments in one word is so
> completely bizarre to me that I can't imagine anyone even trying it
> casually to see if it works.  Although it is likely that some people
> have stumbled upon it accidentally via typos, it's hard to imagine
> them wanting to use it in any kind of pratical application.
>
> +1 for dropping this quirk.  And, if there are no objections (or other
> takers), I volunteer to write a patch.
>

Here's a quick and dirty patch which removes the responsible code from psql 
(maybe not enough, but short testing shows it's working). Sorry for the 
unified diff....

+1, too. I advised people not to use that syntax for years now, maybe we're 
in luck and everyone else was doing the same ;)

-- 
  Thanks

                    Bernd

Attachment: rm_onetoken_params.patch
Description: text/x-diff (972 bytes)

In response to

Responses

pgsql-hackers by date

Next:From: Merlin MoncureDate: 2008-04-03 19:43:50
Subject: Re: psql \G command -- send query and output using extended format
Previous:From: Joshua D. DrakeDate: 2008-04-03 19:24:55
Subject: Re: modules

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group