Thread: Improving psql \ds

Improving psql \ds

From
Julien Tachoires
Date:
Hi,

I would like to work on psql \ds improvements. Here's my idea :
- in src/bin/psql/describe.c, add a new function :
listSequences(*pattern, verbose) wich will list sequences and remove
code related to sequences from listTables()
- in src/bin/psql/command.c, call listSequences() on \ds
- about listSequences() implementation :  - get list from pg_catalog.pg_class WHERE relkind = 'S'  - for each seq.
name,get details using : SELECT * FROM <seqname>;
 
(is there an other way to do that ?)

About \ds behaviour, I think to add 2 columns :
- 'LastValue'
- 'Increment'

for \ds+ :
- all extras informations available from the sequence table.

BTW, why don't we get last_value value with
pg_catalog.pg_sequence_parameters(oid) ? I guess this is because
last_value is not a parameter... Perhaps, having a
pg_sequence_all(oid) or something like that, giving all informations
from the seq. table could be usefull.

Thought ?

Cheers,



Re: Improving psql \ds

From
Tom Lane
Date:
Julien Tachoires <julmon@gmail.com> writes:
> About \ds behaviour, I think to add 2 columns :
> - 'LastValue'
> - 'Increment'

That would make the command a great deal slower, since it would have to
access each sequence to get that info.  I don't object to adding such
columns to \ds+, but I don't think it's a good idea to put them in the
basic command.

The other problem you're going to have here is that there is in fact no
such command as "\ds" (nor "\ds+"); rather, it's a special case of
\dtsvi.  As such, putting any relkind-specific info into the result is
problematic.  I think you're going to have to invent a different command
if you want there to be sequence-specific columns.
        regards, tom lane



Re: Improving psql \ds

From
Julien Tachoires
Date:
2012/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
> Julien Tachoires <julmon@gmail.com> writes:
>> About \ds behaviour, I think to add 2 columns :
>> - 'LastValue'
>> - 'Increment'
>
> That would make the command a great deal slower, since it would have to
> access each sequence to get that info.  I don't object to adding such
> columns to \ds+, but I don't think it's a good idea to put them in the
> basic command.

Ok.

> The other problem you're going to have here is that there is in fact no
> such command as "\ds" (nor "\ds+"); rather, it's a special case of
> \dtsvi.  As such, putting any relkind-specific info into the result is
> problematic.  I think you're going to have to invent a different command
> if you want there to be sequence-specific columns.

Yes, that's why I plan to create a new function listSequences() and
call it from src/bin/psql/command.c :
+         /* \d* commands */
+    else if (cmd[0] == 'd')
+    {
...
+            case 's':
+                success = listSequences(pattern, show_verbose);
+                break;

Cheers,



Re: Improving psql \ds

From
Robert Haas
Date:
On Mon, Oct 8, 2012 at 3:49 AM, Julien Tachoires <julmon@gmail.com> wrote:
> 2012/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
>> Julien Tachoires <julmon@gmail.com> writes:
>>> About \ds behaviour, I think to add 2 columns :
>>> - 'LastValue'
>>> - 'Increment'
>>
>> That would make the command a great deal slower, since it would have to
>> access each sequence to get that info.  I don't object to adding such
>> columns to \ds+, but I don't think it's a good idea to put them in the
>> basic command.
>
> Ok.
>
>> The other problem you're going to have here is that there is in fact no
>> such command as "\ds" (nor "\ds+"); rather, it's a special case of
>> \dtsvi.  As such, putting any relkind-specific info into the result is
>> problematic.  I think you're going to have to invent a different command
>> if you want there to be sequence-specific columns.
>
> Yes, that's why I plan to create a new function listSequences() and
> call it from src/bin/psql/command.c :
> +       /* \d* commands */
> +       else if (cmd[0] == 'd')
> +       {
> ...
> +                       case 's':
> +                               success = listSequences(pattern, show_verbose);
> +                               break;

What happens if the user does this:

\dis

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: Improving psql \ds

From
Tom Lane
Date:
Julien Tachoires <julmon@gmail.com> writes:
> 2012/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
>> The other problem you're going to have here is that there is in fact no
>> such command as "\ds" (nor "\ds+"); rather, it's a special case of
>> \dtsvi.  As such, putting any relkind-specific info into the result is
>> problematic.  I think you're going to have to invent a different command
>> if you want there to be sequence-specific columns.

> Yes, that's why I plan to create a new function listSequences() and
> call it from src/bin/psql/command.c :
> +         /* \d* commands */
> +    else if (cmd[0] == 'd')
> +    {
> ...
> +            case 's':
> +                success = listSequences(pattern, show_verbose);
> +                break;

No, that's not acceptable, because it will break cases such as "\dstv".

The \dxxx command namespace is already direly overloaded; I'm not sure
cramming more behaviors into it is a good idea anyway.  Perhaps
something along the line of "\seqs" would be a usable substitute.
        regards, tom lane



Re: Improving psql \ds

From
Julien Tachoires
Date:
2012/10/8 Robert Haas <robertmhaas@gmail.com>:
> On Mon, Oct 8, 2012 at 3:49 AM, Julien Tachoires <julmon@gmail.com> wrote:
>> 2012/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
>>> Julien Tachoires <julmon@gmail.com> writes:
>>>> About \ds behaviour, I think to add 2 columns :
>>>> - 'LastValue'
>>>> - 'Increment'
>>>
>>> That would make the command a great deal slower, since it would have to
>>> access each sequence to get that info.  I don't object to adding such
>>> columns to \ds+, but I don't think it's a good idea to put them in the
>>> basic command.
>>
>> Ok.
>>
>>> The other problem you're going to have here is that there is in fact no
>>> such command as "\ds" (nor "\ds+"); rather, it's a special case of
>>> \dtsvi.  As such, putting any relkind-specific info into the result is
>>> problematic.  I think you're going to have to invent a different command
>>> if you want there to be sequence-specific columns.
>>
>> Yes, that's why I plan to create a new function listSequences() and
>> call it from src/bin/psql/command.c :
>> +       /* \d* commands */
>> +       else if (cmd[0] == 'd')
>> +       {
>> ...
>> +                       case 's':
>> +                               success = listSequences(pattern, show_verbose);
>> +                               break;
>
> What happens if the user does this:
>
> \dis

hmm, you're right, this is not a good idea.



Re: Improving psql \ds

From
Julien Tachoires
Date:
2012/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
> Julien Tachoires <julmon@gmail.com> writes:
>> 2012/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
>>> The other problem you're going to have here is that there is in fact no
>>> such command as "\ds" (nor "\ds+"); rather, it's a special case of
>>> \dtsvi.  As such, putting any relkind-specific info into the result is
>>> problematic.  I think you're going to have to invent a different command
>>> if you want there to be sequence-specific columns.
>
>> Yes, that's why I plan to create a new function listSequences() and
>> call it from src/bin/psql/command.c :
>> +             /* \d* commands */
>> +     else if (cmd[0] == 'd')
>> +     {
>> ...
>> +                     case 's':
>> +                             success = listSequences(pattern, show_verbose);
>> +                             break;
>
> No, that's not acceptable, because it will break cases such as "\dstv".
>
> The \dxxx command namespace is already direly overloaded; I'm not sure
> cramming more behaviors into it is a good idea anyway.  Perhaps
> something along the line of "\seqs" would be a usable substitute.

Ok. Does having both '\ds' and , let's call it '\seqs', won't be
source of confusion for the user ?



Re: Improving psql \ds

From
Gavin Flower
Date:
On 09/10/12 03:53, Robert Haas wrote:
> On Mon, Oct 8, 2012 at 3:49 AM, Julien Tachoires <julmon@gmail.com> wrote:
>> 2012/10/8 Tom Lane <tgl@sss.pgh.pa.us>:
>>> Julien Tachoires <julmon@gmail.com> writes:
>>>> About \ds behaviour, I think to add 2 columns :
>>>> - 'LastValue'
>>>> - 'Increment'
>>> That would make the command a great deal slower, since it would have to
>>> access each sequence to get that info.  I don't object to adding such
>>> columns to \ds+, but I don't think it's a good idea to put them in the
>>> basic command.
>> Ok.
>>
>>> The other problem you're going to have here is that there is in fact no
>>> such command as "\ds" (nor "\ds+"); rather, it's a special case of
>>> \dtsvi.  As such, putting any relkind-specific info into the result is
>>> problematic.  I think you're going to have to invent a different command
>>> if you want there to be sequence-specific columns.
>> Yes, that's why I plan to create a new function listSequences() and
>> call it from src/bin/psql/command.c :
>> +       /* \d* commands */
>> +       else if (cmd[0] == 'd')
>> +       {
>> ...
>> +                       case 's':
>> +                               success = listSequences(pattern, show_verbose);
>> +                               break;
> What happens if the user does this:
>
> \dis
>
Hmm...

'According' to Terry Prachett,that is probably short hand for telling 
the backend to go to Hell = 'dis' is apparently another name for 'Hell'!
(In his book 'Truth', commander Vimes has a personal dis-organiser - as 
the 'dis-organiser' is run by a demon from Hell.)

Now back to more appropriate comments...