Re: [GENERAL] Temporary tables and miscellaneous schemas - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [GENERAL] Temporary tables and miscellaneous schemas
Date
Msg-id 200312222013.hBMKD3S23003@candle.pha.pa.us
Whole thread Raw
In response to Re: [GENERAL] Temporary tables and miscellaneous schemas  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [GENERAL] Temporary tables and miscellaneous schemas  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-patches
Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > OK, the following patch uses UNION and an =ANY() join to the
> > current_schemas() array to suppress non-local temp schemas, but display
> > all other schemas.
>
> Why are you doing any of this?  We had agreed to suppress all temp
> schemas, period.  The query should be simple.

I know some feel that showing any temporary schemas is wrong, but it
seems that the local temp schema has valuable information.  If I do \d
pg_temp_1.*, I see all my temporary tables.  I know we have a TODO to
show all existing prepared statements, and giving people a way to see
their temp tables seems important.  In fact, it seems more valuable than
the information containted in pg_toast.

The attached patch documents that non-local temp tables are suppressed.
As for people accidentally hardcoding the temp table schema in their
scripts, I don't see how someone would make that mistake with a schema
called pg_temp_##.  It is sort of like assuming a file will always exist
in /tmp.

One nifty idea would be for pg_temp.* to alway refer to your local temp
schema.  Is that a TODO?

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/ref/psql-ref.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/ref/psql-ref.sgml,v
retrieving revision 1.101
diff -c -c -r1.101 psql-ref.sgml
*** doc/src/sgml/ref/psql-ref.sgml    1 Dec 2003 22:21:54 -0000    1.101
--- doc/src/sgml/ref/psql-ref.sgml    22 Dec 2003 19:18:16 -0000
***************
*** 957,962 ****
--- 957,963 ----
          Lists all available schemas (namespaces). If <replaceable
          class="parameter">pattern</replaceable> (a regular expression)
          is specified, only schemas whose names match the pattern are listed.
+         Non-local temporary schemas are suppressed.
          </para>
          </listitem>
        </varlistentry>
Index: src/bin/psql/describe.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/describe.c,v
retrieving revision 1.90
diff -c -c -r1.90 describe.c
*** src/bin/psql/describe.c    1 Dec 2003 22:21:54 -0000    1.90
--- src/bin/psql/describe.c    22 Dec 2003 19:18:19 -0000
***************
*** 1626,1639 ****

      initPQExpBuffer(&buf);
      printfPQExpBuffer(&buf,
!                       "SELECT n.nspname AS \"%s\",\n"
!                       "       u.usename AS \"%s\"\n"
          "FROM pg_catalog.pg_namespace n LEFT JOIN pg_catalog.pg_user u\n"
!                       "       ON n.nspowner=u.usesysid\n",
                        _("Name"),
                        _("Owner"));

!     processNamePattern(&buf, pattern, false, false,
                         NULL, "n.nspname", NULL,
                         NULL);

--- 1626,1654 ----

      initPQExpBuffer(&buf);
      printfPQExpBuffer(&buf,
!         "SELECT n.nspname AS \"%s\",\n"
!         "       u.usename AS \"%s\"\n"
          "FROM pg_catalog.pg_namespace n LEFT JOIN pg_catalog.pg_user u\n"
!         "       ON n.nspowner=u.usesysid\n"
!         "WHERE    n.nspname NOT LIKE 'pg_temp_%%'\n",
                        _("Name"),
                        _("Owner"));
+     processNamePattern(&buf, pattern, true, false,
+                        NULL, "n.nspname", NULL,
+                        NULL);

!     appendPQExpBuffer(&buf,
!         "UNION ALL\n"    /* show only local temp schema */
!         "SELECT n.nspname AS \"%s\",\n"
!         "       u.usename AS \"%s\"\n"
!         "FROM pg_catalog.pg_namespace n LEFT JOIN pg_catalog.pg_user u\n"
!         "       ON n.nspowner=u.usesysid,\n"
!         "      (SELECT current_schemas('t'::boolean)) AS curr_schemas(name)\n"
!         "WHERE    n.nspname LIKE 'pg_temp_%%' AND\n"
!         "        n.nspname = ANY(curr_schemas.name)\n",
!                       _("Name"),
!                       _("Owner"));
!     processNamePattern(&buf, pattern, true, false,
                         NULL, "n.nspname", NULL,
                         NULL);


pgsql-patches by date:

Previous
From: Tom Lane
Date:
Subject: Re: [GENERAL] Temporary tables and miscellaneous schemas
Next
From: Tom Lane
Date:
Subject: Re: [GENERAL] Temporary tables and miscellaneous schemas