Thread: TODO item: Have psql show current values for a sequence

TODO item: Have psql show current values for a sequence

From
"Dickson S. Guedes"
Date:
Hi all,

These patch implements the TODO item: Have psql show current values
for a sequence.
Comments are welcome.

* Credits

The original patch were developed by Euler Taveira de Oliveira
<euler@timbira.com>
but how he is a little busy, he sends it to me and I made some changes
to satisfy
the TODO item above.

* Discussions

http://archives.postgresql.org/pgsql-hackers/2007-12/msg00102.php
http://archives.postgresql.org/pgsql-hackers/2007-12/msg00605.php

* Outputs

# \d foo_bar_seq
          Sequence "public.foo_bar_seq"
+---------------+---------+---------------------+
|    Column     |  Type   |        Value        |
+---------------+---------+---------------------+
| sequence_name | name    | foo_bar_seq         |
| last_value    | bigint  | 11                  |
| start_value   | bigint  | 1                   |
| increment_by  | bigint  | 1                   |
| max_value     | bigint  | 9223372036854775807 |
| min_value     | bigint  | 1                   |
| cache_value   | bigint  | 1                   |
| log_cnt       | bigint  | 31                  |
| is_cycled     | boolean | f                   |
| is_called     | boolean | t                   |
+---------------+---------+---------------------+

# \d+ foo_bar_seq
                 Sequence "public.foo_bar_seq"
+---------------+---------+---------------------+-------------+
|    Column     |  Type   |        Value        | Description |
+---------------+---------+---------------------+-------------+
| sequence_name | name    | foo_bar_seq         |             |
| last_value    | bigint  | 11                  |             |
| start_value   | bigint  | 1                   |             |
| increment_by  | bigint  | 1                   |             |
| max_value     | bigint  | 9223372036854775807 |             |
| min_value     | bigint  | 1                   |             |
| cache_value   | bigint  | 1                   |             |
| log_cnt       | bigint  | 31                  |             |
| is_cycled     | boolean | f                   |             |
| is_called     | boolean | t                   |             |
+---------------+---------+---------------------+-------------+

--
[]s
Dickson S. Guedes
--------------------------------------
Projeto Colmeia - Curitiba - PR
+55 (41) 3254-7130 ramal: 27
http://makeall.wordpress.com/
http://pgcon.postgresql.org.br/
http://planeta.postgresql.org.br/

Attachment
On Sat, May 24, 2008 at 12:27:16AM -0300, Dickson S. Guedes wrote:
> Hi all,
>
> These patch implements the TODO item: Have psql show current values
> for a sequence.
> Comments are welcome.
>
>           Sequence "public.foo_bar_seq"
> +---------------+---------+---------------------+
> |    Column     |  Type   |        Value        |
> +---------------+---------+---------------------+
> | sequence_name | name    | foo_bar_seq         |
> | last_value    | bigint  | 11                  |
> | start_value   | bigint  | 1                   |
> | increment_by  | bigint  | 1                   |
> | max_value     | bigint  | 9223372036854775807 |
> | min_value     | bigint  | 1                   |
> | cache_value   | bigint  | 1                   |
> | log_cnt       | bigint  | 31                  |
> | is_cycled     | boolean | f                   |
> | is_called     | boolean | t                   |
> +---------------+---------+---------------------+

Is it now the style to draw a complete box around /d* displays? Or can we
dispense with the top and bottom rows of dashes?

-dg

--
David Gould       daveg@sonic.net      510 536 1443    510 282 0869
If simplicity worked, the world would be overrun with insects.

Re: [PATCHES] TODO item: Have psql show current values for a sequence

From
"Dickson S. Guedes"
Date:
On Sat, May 24, 2008 at 2:25 AM, daveg <daveg@sonic.net> wrote:
> On Sat, May 24, 2008 at 12:27:16AM -0300, Dickson S. Guedes wrote:
>> Hi all,
>>
>> These patch implements the TODO item: Have psql show current values
>> for a sequence.
>> Comments are welcome.
>>
>>           Sequence "public.foo_bar_seq"
>> +---------------+---------+---------------------+
>> |    Column     |  Type   |        Value        |
>> +---------------+---------+---------------------+
>> | sequence_name | name    | foo_bar_seq         |
>> | last_value    | bigint  | 11                  |
>> | start_value   | bigint  | 1                   |
>> | increment_by  | bigint  | 1                   |
>> | max_value     | bigint  | 9223372036854775807 |
>> | min_value     | bigint  | 1                   |
>> | cache_value   | bigint  | 1                   |
>> | log_cnt       | bigint  | 31                  |
>> | is_cycled     | boolean | f                   |
>> | is_called     | boolean | t                   |
>> +---------------+---------+---------------------+
>
> Is it now the style to draw a complete box around /d* displays? Or can we
> dispense with the top and bottom rows of dashes?

Hi Dave,

This box around the display is because I'm using \pset border 2.

--
[]s
Dickson S. Guedes
-------------------------------------
Projeto Colmeia - Curitiba - PR
+55 (41) 3254-7130 ramal: 27
http://makeall.wordpress.com/
http://pgcon.postgresql.org.br/
http://planeta.postgresql.org.br/

Re: TODO item: Have psql show current values for a sequence

From
"Dickson S. Guedes"
Date:
On Sat, May 24, 2008 at 12:27 AM, Dickson S. Guedes <guediz@gmail.com> wrote:
> Hi all,
>
> These patch implements the TODO item: Have psql show current values
> for a sequence.

Hi all,

There are some comments or suggestions about this patch?

Thanks all.
--
[]s
Dickson S. Guedes
-------------------------------------
Projeto Colmeia - Curitiba - PR
+55 (41) 3254-7130 ramal: 27
http://makeall.wordpress.com/
http://pgcon.postgresql.org.br/
http://planeta.postgresql.org.br/

Re: TODO item: Have psql show current values for a sequence

From
Bruce Momjian
Date:
Wow.  I adjusted the patch slightly and applied it;  the updated version
is attached.  We have been waiting for this to be done for quite some
time.  Thanks.

---------------------------------------------------------------------------


Dickson S. Guedes wrote:
> Hi all,
>
> These patch implements the TODO item: Have psql show current values
> for a sequence.
> Comments are welcome.
>
> * Credits
>
> The original patch were developed by Euler Taveira de Oliveira
> <euler@timbira.com>
> but how he is a little busy, he sends it to me and I made some changes
> to satisfy
> the TODO item above.
>
> * Discussions
>
> http://archives.postgresql.org/pgsql-hackers/2007-12/msg00102.php
> http://archives.postgresql.org/pgsql-hackers/2007-12/msg00605.php
>
> * Outputs
>
> # \d foo_bar_seq
>           Sequence "public.foo_bar_seq"
> +---------------+---------+---------------------+
> |    Column     |  Type   |        Value        |
> +---------------+---------+---------------------+
> | sequence_name | name    | foo_bar_seq         |
> | last_value    | bigint  | 11                  |
> | start_value   | bigint  | 1                   |
> | increment_by  | bigint  | 1                   |
> | max_value     | bigint  | 9223372036854775807 |
> | min_value     | bigint  | 1                   |
> | cache_value   | bigint  | 1                   |
> | log_cnt       | bigint  | 31                  |
> | is_cycled     | boolean | f                   |
> | is_called     | boolean | t                   |
> +---------------+---------+---------------------+
>
> # \d+ foo_bar_seq
>                  Sequence "public.foo_bar_seq"
> +---------------+---------+---------------------+-------------+
> |    Column     |  Type   |        Value        | Description |
> +---------------+---------+---------------------+-------------+
> | sequence_name | name    | foo_bar_seq         |             |
> | last_value    | bigint  | 11                  |             |
> | start_value   | bigint  | 1                   |             |
> | increment_by  | bigint  | 1                   |             |
> | max_value     | bigint  | 9223372036854775807 |             |
> | min_value     | bigint  | 1                   |             |
> | cache_value   | bigint  | 1                   |             |
> | log_cnt       | bigint  | 31                  |             |
> | is_cycled     | boolean | f                   |             |
> | is_called     | boolean | t                   |             |
> +---------------+---------+---------------------+-------------+
>
> --
> []s
> Dickson S. Guedes
> --------------------------------------
> Projeto Colmeia - Curitiba - PR
> +55 (41) 3254-7130 ramal: 27
> http://makeall.wordpress.com/
> http://pgcon.postgresql.org.br/
> http://planeta.postgresql.org.br/

[ Attachment, skipping... ]

>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers

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

  + If your life is a hard drive, Christ can be your backup. +
Index: src/bin/psql/describe.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/describe.c,v
retrieving revision 1.179
diff -c -c -r1.179 describe.c
*** src/bin/psql/describe.c    14 Jul 2008 23:13:04 -0000    1.179
--- src/bin/psql/describe.c    15 Jul 2008 03:06:24 -0000
***************
*** 811,817 ****
      printTableContent cont;
      int            i;
      char       *view_def = NULL;
!     char       *headers[5];
      char      **modifiers = NULL;
      char      **ptr;
      PQExpBufferData title;
--- 811,818 ----
      printTableContent cont;
      int            i;
      char       *view_def = NULL;
!     char       *headers[6];
!     char      **seq_values = NULL;
      char      **modifiers = NULL;
      char      **ptr;
      PQExpBufferData title;
***************
*** 869,874 ****
--- 870,904 ----
      tableinfo.tablespace = (pset.sversion >= 80000) ?
          atooid(PQgetvalue(res, 0, 6)) : 0;
      PQclear(res);
+
+     /*
+      * This is used to get the values of a sequence and store it in an
+      * array that will be used later.
+      */
+     if (tableinfo.relkind == 'S')
+     {
+         PGresult   *result;
+
+ #define SEQ_NUM_COLS 10
+         printfPQExpBuffer(&buf,
+                 "SELECT sequence_name, last_value, \n"
+                 "        start_value, increment_by, \n"
+                 "        max_value, min_value, cache_value, \n"
+                 "        log_cnt, is_cycled, is_called \n"
+                 "FROM \"%s\"",
+                 relationname);
+
+         result = PSQLexec(buf.data, false);
+         if (!result)
+             goto error_return;
+
+         seq_values = pg_malloc_zero((SEQ_NUM_COLS+1) * sizeof(*seq_values));
+
+         for (i = 0; i < SEQ_NUM_COLS; i++)
+             seq_values[i] = pg_strdup(PQgetvalue(result, 0, i));
+
+         PQclear(result);
+     }

      /* Get column info (index requires additional checks) */
      printfPQExpBuffer(&buf, "SELECT a.attname,");
***************
*** 932,938 ****
      }

      /* Set the number of columns, and their names */
!     cols = 2;
      headers[0] = gettext_noop("Column");
      headers[1] = gettext_noop("Type");

--- 962,968 ----
      }

      /* Set the number of columns, and their names */
!     cols += 2;
      headers[0] = gettext_noop("Column");
      headers[1] = gettext_noop("Type");

***************
*** 943,948 ****
--- 973,981 ----
          modifiers = pg_malloc_zero((numrows + 1) * sizeof(*modifiers));
      }

+     if (tableinfo.relkind == 'S')
+         headers[cols++] = gettext_noop("Value");
+
      if (verbose)
      {
          headers[cols++] = gettext_noop("Storage");
***************
*** 980,986 ****

          /* Type */
          printTableAddCell(&cont, PQgetvalue(res, i, 1), false);
!
          /* Extra: not null and default */
          if (show_modifiers)
          {
--- 1013,1023 ----

          /* Type */
          printTableAddCell(&cont, PQgetvalue(res, i, 1), false);
!
!         /* A special 'Value' column for sequences */
!         if (tableinfo.relkind == 'S')
!             printTableAddCell(&cont, seq_values[i], false);
!
          /* Extra: not null and default */
          if (show_modifiers)
          {
***************
*** 1543,1549 ****
      termPQExpBuffer(&buf);
      termPQExpBuffer(&title);
      termPQExpBuffer(&tmpbuf);
!
      if (show_modifiers)
      {
          for (ptr = modifiers; *ptr; ptr++)
--- 1580,1593 ----
      termPQExpBuffer(&buf);
      termPQExpBuffer(&title);
      termPQExpBuffer(&tmpbuf);
!
!     if (tableinfo.relkind == 'S')
!     {
!         for (ptr = seq_values; *ptr; ptr++)
!             free(*ptr);
!         free(seq_values);
!     }
!
      if (show_modifiers)
      {
          for (ptr = modifiers; *ptr; ptr++)

Re: TODO item: Have psql show current values for a sequence

From
Tom Lane
Date:
Bruce Momjian <bruce@momjian.us> writes:
> Wow.  I adjusted the patch slightly and applied it;  the updated version
> is attached.  We have been waiting for this to be done for quite some
> time.  Thanks.

Hmm ... I don't think that this patch actually addresses the TODO item.
The TODO item seems to have originated here
http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/TODO.diff?r1=1.1220;r2=1.1221;f=h
in response to this question on pgsql-novice:

> How can I list all the sequences in the database, with their
> attributes (such as last_value)?  (I'm having a hard time guessing
> 'seq-name'; the 'A_id_seq' formula did not work.)
http://archives.postgresql.org/pgsql-novice/2004-02/msg00148.php

This applied-with-little-discussion patch only shows the sequence
values if you do a \d on a specific sequence, or \d on a wildcard
that happens to include some sequences (and probably a lot of other
stuff too, causing the resulting display to be far too long to be
useful).

My interpretation of the TODO item has always been that we should
improve \ds to include all the useful information in a format that
requires only one line per sequence.  The reason it has remained
undone for four years is that that's hard given the existing catalog
representation of sequences and the constraints of describe.c's
implementation.  (I recall at least one failed patch that tried to
do this, though I can't find it in the archives right now.)

I find the present patch to be pretty useless: it's not a material
advance over doing "select * from sequence-name".  I think it should
be reverted and the TODO item reinstated --- perhaps with more detail
about what the item really is requesting.
        regards, tom lane


Re: TODO item: Have psql show current values for a sequence

From
Bruce Momjian
Date:
Sorry for the delay on this.

What I did was to mark the simple TODO items as done and add an
additional TODO item to list all sequence settings:
     D o Have psql show current values for a sequenceo Have psql \ds show all sequences and their settings    *
http://archives.postgresql.org/pgsql-hackers/2008-07/msg00916.php
 

---------------------------------------------------------------------------

Tom Lane wrote:
> Bruce Momjian <bruce@momjian.us> writes:
> > Wow.  I adjusted the patch slightly and applied it;  the updated version
> > is attached.  We have been waiting for this to be done for quite some
> > time.  Thanks.
> 
> Hmm ... I don't think that this patch actually addresses the TODO item.
> The TODO item seems to have originated here
> http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/TODO.diff?r1=1.1220;r2=1.1221;f=h
> in response to this question on pgsql-novice:
> 
> > How can I list all the sequences in the database, with their
> > attributes (such as last_value)?  (I'm having a hard time guessing
> > 'seq-name'; the 'A_id_seq' formula did not work.)
> http://archives.postgresql.org/pgsql-novice/2004-02/msg00148.php
> 
> This applied-with-little-discussion patch only shows the sequence
> values if you do a \d on a specific sequence, or \d on a wildcard
> that happens to include some sequences (and probably a lot of other
> stuff too, causing the resulting display to be far too long to be
> useful).
> 
> My interpretation of the TODO item has always been that we should
> improve \ds to include all the useful information in a format that
> requires only one line per sequence.  The reason it has remained
> undone for four years is that that's hard given the existing catalog
> representation of sequences and the constraints of describe.c's
> implementation.  (I recall at least one failed patch that tried to
> do this, though I can't find it in the archives right now.)
> 
> I find the present patch to be pretty useless: it's not a material
> advance over doing "select * from sequence-name".  I think it should
> be reverted and the TODO item reinstated --- perhaps with more detail
> about what the item really is requesting.
> 
>             regards, tom lane

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +