Обсуждение: Improving psql \ds
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,
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
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,
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
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
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.
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 ?
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...