Обсуждение: Re: [GENERAL] [Help] Temporary Table: Implicitely created index not shown in \d i

Поиск
Список
Период
Сортировка

Re: [GENERAL] [Help] Temporary Table: Implicitely created index not shown in \d i

От
Bruce Momjian
Дата:
> Hi,
>
> I'm running v7.1.2. In psql, if I
>
>   CREATE TEMPORARY TABLE junk (col1 SERIAL, <more cols>)
>
> and check \ds, the implicitely created sequence is shown but \di doesn't
> show
> the implicitely created index.

OK, here is a patch that fixes it so the sequence is temporary like
everything else.  It also adds CREATE TEMPORARY SEQUENCE to the syntax.

    test=> create temp table kkk(x serial);
    NOTICE:  CREATE TABLE will create implicit sequence 'kkk_x_seq' for
    SERIAL column 'kkk.x'
    NOTICE:  CREATE TABLE/UNIQUE will create implicit index 'kkk_x_key' for
    table 'kkk'
    CREATE
    test=> \d
    No relations found.
    test=> \di
    No relations found.
    test=> \dS
              List of relations
          Name      |   Type   |  Owner
    ----------------+----------+----------
    ...
     pg_temp_5396_0 | sequence | postgres
     pg_temp_5396_1 | table    | postgres

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
Index: doc/src/sgml/ref/create_sequence.sgml
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v
retrieving revision 1.15
diff -c -r1.15 create_sequence.sgml
*** doc/src/sgml/ref/create_sequence.sgml    2000/12/08 20:06:58    1.15
--- doc/src/sgml/ref/create_sequence.sgml    2001/06/22 23:02:48
***************
*** 23,29 ****
     <date>1999-07-20</date>
    </refsynopsisdivinfo>
    <synopsis>
! CREATE SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT <replaceable
class="parameter">increment</replaceable>] 
      [ MINVALUE <replaceable class="parameter">minvalue</replaceable> ] [ MAXVALUE <replaceable
class="parameter">maxvalue</replaceable>] 
      [ START <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable
class="parameter">cache</replaceable>] [ CYCLE ] 
    </synopsis>
--- 23,29 ----
     <date>1999-07-20</date>
    </refsynopsisdivinfo>
    <synopsis>
! CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT <replaceable
class="parameter">increment</replaceable>] 
      [ MINVALUE <replaceable class="parameter">minvalue</replaceable> ] [ MAXVALUE <replaceable
class="parameter">maxvalue</replaceable>] 
      [ START <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable
class="parameter">cache</replaceable>] [ CYCLE ] 
    </synopsis>
***************
*** 36,41 ****
--- 36,54 ----
      Inputs
     </title>
     <para>
+
+     <variablelist>
+      <varlistentry>
+       <term>TEMPORARY or TEMP</term>
+       <listitem>
+        <para>
+     If specified, the sequence is created only for this session, and is
+     automatically dropped on session exit.
+     Existing permanent sequences with the same name are not visible
+     (in this session) while the temporary sequence exists.
+        </para>
+       </listitem>
+      </varlistentry>

      <variablelist>
       <varlistentry>
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/sequence.c,v
retrieving revision 1.59
diff -c -r1.59 sequence.c
*** src/backend/commands/sequence.c    2001/06/13 21:07:12    1.59
--- src/backend/commands/sequence.c    2001/06/22 23:02:49
***************
*** 161,166 ****
--- 161,167 ----
      }

      stmt->relname = seq->seqname;
+     stmt->istemp = seq->istemp;
      stmt->inhRelnames = NIL;
      stmt->constraints = NIL;

Index: src/backend/parser/analyze.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/analyze.c,v
retrieving revision 1.189
diff -c -r1.189 analyze.c
*** src/backend/parser/analyze.c    2001/06/04 23:27:23    1.189
--- src/backend/parser/analyze.c    2001/06/22 23:02:51
***************
*** 779,784 ****
--- 779,785 ----

                      sequence = makeNode(CreateSeqStmt);
                      sequence->seqname = pstrdup(sname);
+                     sequence->istemp = stmt->istemp;
                      sequence->options = NIL;

                      elog(NOTICE, "CREATE TABLE will create implicit sequence '%s' for SERIAL column '%s.%s'",
***************
*** 2716,2722 ****
      return qry;
  }

! /*
   * Transform uses of %TYPE in a statement.
   */
  static Node *
--- 2717,2723 ----
      return qry;
  }

! /*
   * Transform uses of %TYPE in a statement.
   */
  static Node *
Index: src/backend/parser/gram.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.231
diff -c -r2.231 gram.y
*** src/backend/parser/gram.y    2001/06/19 22:39:11    2.231
--- src/backend/parser/gram.y    2001/06/22 23:02:53
***************
*** 1574,1584 ****
   *
   *****************************************************************************/

! CreateSeqStmt:  CREATE SEQUENCE relation_name OptSeqList
                  {
                      CreateSeqStmt *n = makeNode(CreateSeqStmt);
!                     n->seqname = $3;
!                     n->options = $4;
                      $$ = (Node *)n;
                  }
          ;
--- 1574,1585 ----
   *
   *****************************************************************************/

! CreateSeqStmt:  CREATE OptTemp SEQUENCE relation_name OptSeqList
                  {
                      CreateSeqStmt *n = makeNode(CreateSeqStmt);
!                     n->istemp = $2;
!                     n->seqname = $4;
!                     n->options = $5;
                      $$ = (Node *)n;
                  }
          ;
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/nodes/parsenodes.h,v
retrieving revision 1.132
diff -c -r1.132 parsenodes.h
*** src/include/nodes/parsenodes.h    2001/06/19 22:39:12    1.132
--- src/include/nodes/parsenodes.h    2001/06/22 23:02:55
***************
*** 402,407 ****
--- 402,408 ----
  {
      NodeTag        type;
      char       *seqname;        /* the relation to create */
+       bool        istemp;            /* is this a temp sequence? */
      List       *options;
  } CreateSeqStmt;

Index: src/interfaces/ecpg/preproc/preproc.y
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/ecpg/preproc/preproc.y,v
retrieving revision 1.140
diff -c -r1.140 preproc.y
*** src/interfaces/ecpg/preproc/preproc.y    2001/06/13 12:38:58    1.140
--- src/interfaces/ecpg/preproc/preproc.y    2001/06/22 23:02:58
***************
*** 1289,1297 ****
   *
   *****************************************************************************/

! CreateSeqStmt:  CREATE SEQUENCE relation_name OptSeqList
                  {
!                     $$ = cat_str(3, make_str("create sequence"), $3, $4);
                  }
          ;

--- 1289,1297 ----
   *
   *****************************************************************************/

! CreateSeqStmt:  CREATE OptTemp SEQUENCE relation_name OptSeqList
                  {
!                     $$ = cat_str(4, make_str("create sequence"), $2, $4, $5);
                  }
          ;


Re: Re: [GENERAL] [Help] Temporary Table: Implicitely created index not shown in \d i

От
Tom Lane
Дата:
Bruce Momjian <pgman@candle.pha.pa.us> writes:
>     test=> \d
>     No relations found.
>     test=> \di
>     No relations found.
>     test=> \dS
>               List of relations
>           Name      |   Type   |  Owner
>     ----------------+----------+----------
>     ...
>      pg_temp_5396_0 | sequence | postgres
>      pg_temp_5396_1 | table    | postgres

Hm.  Shouldn't psql's \dS ignore temp items, since \d and \di do?
Otherwise this looks pretty good...

            regards, tom lane

Re: Re: [GENERAL] [Help] Temporary Table: Implicitely created index not shown in \d i

От
Tom Lane
Дата:
I said:
> Hm.  Shouldn't psql's \dS ignore temp items, since \d and \di do?

Wait a sec --- I was confusing \dS (display system tables) with \ds
(display sequences).  It looks like the latter should get it right
already.

Possibly it does make sense to suppress temp items in \dS, but there
isn't precedent for it.  We should discuss it on its own merits.

            regards, tom lane

Re: Re: [GENERAL] [Help] Temporary Table: Implicitely created index not shown in \d i

От
Bruce Momjian
Дата:
> I said:
> > Hm.  Shouldn't psql's \dS ignore temp items, since \d and \di do?
>
> Wait a sec --- I was confusing \dS (display system tables) with \ds
> (display sequences).  It looks like the latter should get it right
> already.


test=> \ds
No relations found.

> Possibly it does make sense to suppress temp items in \dS, but there
> isn't precedent for it.  We should discuss it on its own merits.

If we don't show temp items with \dS we need another backslash command
to show temp stuff.  Doesn't seem worth it, especially since we don't
show much info about temp stuff except that numeric name.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026