Corey Huinker wrote:
> Some of the discussions about making psql more user friendly (more tab 
> completions help, exit, etc) got me thinking about other ways that psql could 
> be more friendly, and the one that comes to mind is our terse but cryptic \d* 
> commands.
> 
> I think it would be helpful and instructive to have corresponding long-form 
> describe commands. 
> 
> Take describing schemas. Is \dn intuitive? Not really. In hindsight, you may 
> think "yeah, a schema is a namespace", but you never guessed 'n' on the first 
> try, or the second.
> 
> Looking over exec_command_d() a bit, I think it's a bit of a stretch do have 
> each command handle a long form like this:
> 
> \describe table my_table
> or
> \describe table verbose my_table
> 
> because then each \d-variant has to account for objects named "table" and 
> "verbose" and that's a path to unhappiness.
> 
> But if we dash-separated them, then all of the strcmps would be in the 'e' 
> subsection, and each one would just have to know it's long to short 
> translation, and call exec_command_d with the corresponding short command
> 
> describe => d
> describe-verbose => d+
> describe-aggregates-verbose => da+
> describe-roles => du
> 
> We could even presume the verbose flag in all cases (after all, the user was 
> being verbose...), which would also cut down on tab-completion results, and 
> we could check for interactive mode and display a message like
> 
> \describe-schemas (short: \dn+)
> 
> so that the person has the opportunity to learn the corresponding short 
> command.
> 
> In additional to aiding tab completion discovery of the commands (i.e. typing 
> "\desc" and then hitting tab, it would also make scripts a little more 
> self-documenting.
> 
> Thoughts?

I'm somewhat -1 on this.

It would be about as hard to memorize \describe-schemas as it is to memorize 
\dn:
You'd have to remember that it is "-" and not "_", that it is "describe", not 
"desc"
and that it is "schemas", not "schema".

Moreover, it would be as awkward to have
   \describe-schemas public
as it would be to list all schemas with
   \describe-schema

But my strongest criticism is that the \d* commands are for interactive use,
and who wants to type in a long string like that?  The beginner won't be able to
guess the correct command, and the experienced user would refuse to use it.


Having said all that, I can imagine that having \desc and \describe as an
alternative to \d would help beginners who come e.g. from Oracle,
but that would mean a change of the current behavior:

test=> \describe
         List of foreign servers
  Name  |  Owner   | Foreign-data wrapper 
--------+----------+----------------------
 oracle | postgres | oracle_fdw
(1 row)

This is because \des lists foreign servers, and the rest of the command is 
ignored.

Yours,
Laurenz Albe

Reply via email to