Attached is a patch that modifies psql \dX commands to treat objects
in information_schema as "system objects". This prevents them from
showing up in \dX *.* and polluting the user objects list. This is
especially annoying if user objects are in multiple schemas, and
one wants to get a quick overview by running \dX *.*

regards,
Martin
*** a/src/bin/psql/describe.c
--- b/src/bin/psql/describe.c
***************
*** 23,28 ****
--- 23,34 ----
  #include "variables.h"
  
  
+ /* Macros for exluding system objects from \d commands */
+ #define NOT_SYSTEM_OBJECT		" n.nspname NOT IN ('pg_catalog', 'information_schema')\n"
+ #define AND_NOT_SYSTEM_OBJECT	" AND" NOT_SYSTEM_OBJECT
+ #define WHERE_NOT_SYSTEM_OBJECT	" WHERE" NOT_SYSTEM_OBJECT
+ 
+ 
  static bool describeOneTableDetails(const char *schemaname,
  						const char *relationname,
  						const char *oid,
***************
*** 95,101 **** describeAggregates(const char *pattern, bool verbose, bool showSystem)
  					  gettext_noop("Description"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
--- 101,107 ----
  					  gettext_noop("Description"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
***************
*** 282,288 **** describeFunctions(const char *pattern, bool verbose, bool showSystem)
  					  "      AND NOT p.proisagg\n");
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
--- 288,294 ----
  					  "      AND NOT p.proisagg\n");
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
***************
*** 373,379 **** describeTypes(const char *pattern, bool verbose, bool showSystem)
  		appendPQExpBuffer(&buf, "  AND t.typname !~ '^_'\n");
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	/* Match name pattern against either internal or external name */
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 379,385 ----
  		appendPQExpBuffer(&buf, "  AND t.typname !~ '^_'\n");
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	/* Match name pattern against either internal or external name */
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 428,434 **** describeOperators(const char *pattern, bool showSystem)
  					  gettext_noop("Description"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, true,
  						  "n.nspname", "o.oprname", NULL,
--- 434,440 ----
  					  gettext_noop("Description"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, true,
  						  "n.nspname", "o.oprname", NULL,
***************
*** 632,638 **** objectDescription(const char *pattern, bool showSystem)
  					  gettext_noop("aggregate"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
--- 638,644 ----
  					  gettext_noop("aggregate"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
***************
*** 655,661 **** objectDescription(const char *pattern, bool showSystem)
  					  gettext_noop("function"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
--- 661,667 ----
  					  gettext_noop("function"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "p.proname", NULL,
***************
*** 673,679 **** objectDescription(const char *pattern, bool showSystem)
  					  gettext_noop("operator"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
   
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
  						  "n.nspname", "o.oprname", NULL,
--- 679,685 ----
  					  gettext_noop("operator"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);
   
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
  						  "n.nspname", "o.oprname", NULL,
***************
*** 691,697 **** objectDescription(const char *pattern, bool showSystem)
  					  gettext_noop("data type"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
  						  "n.nspname", "pg_catalog.format_type(t.oid, NULL)",
--- 697,703 ----
  					  gettext_noop("data type"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
  						  "n.nspname", "pg_catalog.format_type(t.oid, NULL)",
***************
*** 715,721 **** objectDescription(const char *pattern, bool showSystem)
  					  gettext_noop("index"),
  					  gettext_noop("sequence"));
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.relname", NULL,
--- 721,727 ----
  					  gettext_noop("index"),
  					  gettext_noop("sequence"));
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.relname", NULL,
***************
*** 735,741 **** objectDescription(const char *pattern, bool showSystem)
  					  gettext_noop("rule"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	/* XXX not sure what to do about visibility rule here? */
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 741,747 ----
  					  gettext_noop("rule"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	/* XXX not sure what to do about visibility rule here? */
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 754,760 **** objectDescription(const char *pattern, bool showSystem)
  	"       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n",
  					  gettext_noop("trigger"));
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
  
  	/* XXX not sure what to do about visibility rule here? */
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
--- 760,766 ----
  	"       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n",
  					  gettext_noop("trigger"));
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);
  
  	/* XXX not sure what to do about visibility rule here? */
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
***************
*** 809,815 **** describeTableDetails(const char *pattern, bool verbose, bool showSystem)
  	 "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n");
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
  						  "n.nspname", "c.relname", NULL,
--- 815,821 ----
  	 "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n");
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, WHERE_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
  						  "n.nspname", "c.relname", NULL,
***************
*** 2018,2024 **** listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
  	if (!showSystem)
  		/* Exclude system and pg_toast objects, but show temp tables */
  		appendPQExpBuffer(&buf,
! 						  "  AND n.nspname <> 'pg_catalog'\n"
  						  "  AND n.nspname !~ '^pg_toast'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 2024,2030 ----
  	if (!showSystem)
  		/* Exclude system and pg_toast objects, but show temp tables */
  		appendPQExpBuffer(&buf,
! 						  AND_NOT_SYSTEM_OBJECT
  						  "  AND n.nspname !~ '^pg_toast'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 2090,2096 **** listDomains(const char *pattern, bool showSystem)
  					  gettext_noop("Check"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "  AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "t.typname", NULL,
--- 2096,2102 ----
  					  gettext_noop("Check"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "t.typname", NULL,
***************
*** 2145,2151 **** listConversions(const char *pattern, bool showSystem)
  					  gettext_noop("Default?"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.conname", NULL,
--- 2151,2157 ----
  					  gettext_noop("Default?"));
  
   	if (!showSystem)
!  		appendPQExpBuffer(&buf, AND_NOT_SYSTEM_OBJECT);
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.conname", NULL,
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to