Обсуждение: Eliminate information_schema from oid2name listing
This small patch eliminates relations in information_schema from oid2name
listing.
Index: oid2name.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/contrib/oid2name/oid2name.c,v
retrieving revision 1.18
diff -u -r1.18 oid2name.c
--- oid2name.c 14 May 2003 03:25:56 -0000 1.18
+++ oid2name.c 21 Jul 2003 03:49:57 -0000
@@ -355,7 +355,10 @@
if (systables == 1)
snprintf(todo, 1024, "select relfilenode,relname from pg_class order by relname");
else
- snprintf(todo, 1024, "select relfilenode,relname from pg_class where relname not like 'pg_%%' order by
relname");
+ snprintf(todo, 1024, "select relfilenode,relname "
+ "from pg_class c, pg_namespace n "
+ "where c.relnamespace = n.oid and n.nspname != 'information_schema' and c.relname not like 'pg_%%' "
+ "order by c.relname");
sql_exec(conn, todo, 0);
}
Kenji Sugita <sugita@srapc1327.sra.co.jp> writes:
> This small patch eliminates relations in information_schema from oid2name
> listing.
Seems like it'd be a good idea to eliminate views and composite types as
well.
regards, tom lane
From: Tom Lane <tgl@sss.pgh.pa.us> Subject: Re: [PATCHES] Eliminate information_schema from oid2name listing Date: Mon, 21 Jul 2003 00:32:46 -0400 ;;; Kenji Sugita <sugita@srapc1327.sra.co.jp> writes: ;;; > This small patch eliminates relations in information_schema from oid2name ;;; > listing. ;;; ;;; Seems like it'd be a good idea to eliminate views and composite types as ;;; well. It can be displayed by option -x. Information_schema displayed by "oid2name -d databasename" is noisy. Kenji Sugita
Kenji Sugita writes: > This small patch eliminates relations in information_schema from oid2name > listing. Why would one want to do that? -- Peter Eisentraut peter_e@gmx.net
Peter Eisentraut <peter_e@gmx.net> writes:
> Kenji Sugita writes:
>> This small patch eliminates relations in information_schema from oid2name
>> listing.
> Why would one want to do that?
AFAICS the point of oid2name is to provide a mapping between disk file
names and table names. As such, what it *ought* to be doing is
suppressing views, since those don't have disk files --- they are only
cluttering the listing with irrelevant data. If we put that in, there'd
be no need to special-case information_schema.
regards, tom lane
Your patch has been added to the PostgreSQL unapplied patches list at:
http://momjian.postgresql.org/cgi-bin/pgpatches
I will try to apply it within the next 48 hours.
---------------------------------------------------------------------------
Kenji Sugita wrote:
> This small patch eliminates relations in information_schema from oid2name
> listing.
> Index: oid2name.c
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/contrib/oid2name/oid2name.c,v
> retrieving revision 1.18
> diff -u -r1.18 oid2name.c
> --- oid2name.c 14 May 2003 03:25:56 -0000 1.18
> +++ oid2name.c 21 Jul 2003 03:49:57 -0000
> @@ -355,7 +355,10 @@
> if (systables == 1)
> snprintf(todo, 1024, "select relfilenode,relname from pg_class order by relname");
> else
> - snprintf(todo, 1024, "select relfilenode,relname from pg_class where relname not like 'pg_%%' order by
relname");
> + snprintf(todo, 1024, "select relfilenode,relname "
> + "from pg_class c, pg_namespace n "
> + "where c.relnamespace = n.oid and n.nspname != 'information_schema' and c.relname not like 'pg_%%'
"
> + "order by c.relname");
>
> sql_exec(conn, todo, 0);
> }
>
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend
--
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
Sorry, patch removed from patch queue. I will rework the patch to skip views completely, OK? --------------------------------------------------------------------------- Kenji Sugita wrote: > This small patch eliminates relations in information_schema from oid2name > listing. > Index: oid2name.c > =================================================================== > RCS file: /projects/cvsroot/pgsql-server/contrib/oid2name/oid2name.c,v > retrieving revision 1.18 > diff -u -r1.18 oid2name.c > --- oid2name.c 14 May 2003 03:25:56 -0000 1.18 > +++ oid2name.c 21 Jul 2003 03:49:57 -0000 > @@ -355,7 +355,10 @@ > if (systables == 1) > snprintf(todo, 1024, "select relfilenode,relname from pg_class order by relname"); > else > - snprintf(todo, 1024, "select relfilenode,relname from pg_class where relname not like 'pg_%%' order by relname"); > + snprintf(todo, 1024, "select relfilenode,relname " > + "from pg_class c, pg_namespace n " > + "where c.relnamespace = n.oid and n.nspname != 'information_schema' and c.relname not like 'pg_%%' " > + "order by c.relname"); > > sql_exec(conn, todo, 0); > } > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend -- 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
Patch attached and applied. --------------------------------------------------------------------------- Tom Lane wrote: > Peter Eisentraut <peter_e@gmx.net> writes: > > Kenji Sugita writes: > >> This small patch eliminates relations in information_schema from oid2name > >> listing. > > > Why would one want to do that? > > AFAICS the point of oid2name is to provide a mapping between disk file > names and table names. As such, what it *ought* to be doing is > suppressing views, since those don't have disk files --- they are only > cluttering the listing with irrelevant data. If we put that in, there'd > be no need to special-case information_schema. > > regards, tom lane > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend > -- 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: contrib/oid2name/oid2name.c =================================================================== RCS file: /cvsroot/pgsql-server/contrib/oid2name/oid2name.c,v retrieving revision 1.18 diff -c -c -r1.18 oid2name.c *** contrib/oid2name/oid2name.c 14 May 2003 03:25:56 -0000 1.18 --- contrib/oid2name/oid2name.c 27 Jul 2003 04:42:11 -0000 *************** *** 355,361 **** if (systables == 1) snprintf(todo, 1024, "select relfilenode,relname from pg_class order by relname"); else ! snprintf(todo, 1024, "select relfilenode,relname from pg_class where relname not like 'pg_%%' order by relname"); sql_exec(conn, todo, 0); } --- 355,363 ---- if (systables == 1) snprintf(todo, 1024, "select relfilenode,relname from pg_class order by relname"); else ! snprintf(todo, 1024, "select relfilenode,relname from pg_class " ! "where reltype not in ('v','c') and " ! "relname not like 'pg_%%' order by relname"); sql_exec(conn, todo, 0); }
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> ! "where reltype not in ('v','c') and "
Surely you meant relkind. Also, there is no 'c' relkind; perhaps you
meant 's'? I think v,s,t are all relkinds to exclude here.
regards, tom lane
Tom Lane wrote:
> Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > ! "where reltype not in ('v','c') and "
>
> Surely you meant relkind. Also, there is no 'c' relkind; perhaps you
> meant 's'? I think v,s,t are all relkinds to exclude here.
Yes, sorry, relkind. New attached patch applied with your suggested
relkind list.
I got my list of entries from pg_class.h:
#define RELKIND_INDEX 'i' /* secondary index */
#define RELKIND_RELATION 'r' /* ordinary cataloged heap */
#define RELKIND_SPECIAL 's' /* special (non-heap) */
#define RELKIND_SEQUENCE 'S' /* SEQUENCE relation */
#define RELKIND_UNCATALOGED 'u' /* temporary heap */
#define RELKIND_TOASTVALUE 't' /* moved off huge values */
#define RELKIND_VIEW 'v' /* view */
#define RELKIND_COMPOSITE_TYPE 'c' /* composite type */
Is 't' for toast tables? If so, we should allow 't', no? I wasn't sure
about 's'? Is there a disk file associated with it that oid2name should
diplay?
--
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: contrib/oid2name/oid2name.c
===================================================================
RCS file: /cvsroot/pgsql-server/contrib/oid2name/oid2name.c,v
retrieving revision 1.19
diff -c -c -r1.19 oid2name.c
*** contrib/oid2name/oid2name.c 27 Jul 2003 04:51:45 -0000 1.19
--- contrib/oid2name/oid2name.c 27 Jul 2003 19:29:28 -0000
***************
*** 356,362 ****
snprintf(todo, 1024, "select relfilenode,relname from pg_class order by relname");
else
snprintf(todo, 1024, "select relfilenode,relname from pg_class "
! "where reltype not in ('v','c') and "
"relname not like 'pg_%%' order by relname");
sql_exec(conn, todo, 0);
--- 356,362 ----
snprintf(todo, 1024, "select relfilenode,relname from pg_class order by relname");
else
snprintf(todo, 1024, "select relfilenode,relname from pg_class "
! "where relkind not in ('v','s', 't') and "
"relname not like 'pg_%%' order by relname");
sql_exec(conn, todo, 0);
Bruce Momjian <pgman@candle.pha.pa.us> writes:
> Tom Lane wrote:
>> I think v,s,t are all relkinds to exclude here.
> Is 't' for toast tables? If so, we should allow 't', no? I wasn't sure
> about 's'?
Wups, you are right --- I was thinking 't' meant 'composite type'.
The only 's' in the system is pg_xactlock which does not have a disk
file.
The correct set to exclude seems to be 'v','s','c'.
regards, tom lane
OK, change made and applied. --------------------------------------------------------------------------- Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > Tom Lane wrote: > >> I think v,s,t are all relkinds to exclude here. > > > Is 't' for toast tables? If so, we should allow 't', no? I wasn't sure > > about 's'? > > Wups, you are right --- I was thinking 't' meant 'composite type'. > > The only 's' in the system is pg_xactlock which does not have a disk > file. > > The correct set to exclude seems to be 'v','s','c'. > > regards, tom lane > -- 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