Tom Lane wrote:
> Bruce Momjian <br...@momjian.us> writes:
> > Tom Lane wrote:
> >> I think this falls in the category of "be careful what you wish for,
> >> you might get it".  It is now blindingly obvious that the folks asking
> >> for that had not actually lived with the behavior for any period of
> >> time.
> 
> > I got several emails thanking me for applying the patch, so there is
> > clearly user-demand for 'S'.
> 
> Were any of them from people who had actually *used* the patch for more
> than five minutes?  I think this is clearly a case of allowing abstract
> consistency considerations to override usability.
> 
> The real problem here is that the 'S' suffix for \dt is a bad precedent
> for everything else.  If you want consistency then we need to change
> that end of things.  I think that the idea of a switch to omit system
> objects, rather than include them, might work.

Please test the attached patch;  it reverts to pre-8.4 behavior if any
pattern is present for psql \d commands, including just a simple '*'.

-- 
  Bruce Momjian  <br...@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.195
diff -c -c -r1.195 describe.c
*** src/bin/psql/describe.c	6 Jan 2009 23:01:57 -0000	1.195
--- src/bin/psql/describe.c	15 Jan 2009 16:50:45 -0000
***************
*** 94,100 ****
  					  "WHERE p.proisagg\n",
  					  gettext_noop("Description"));
  
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 94,100 ----
  					  "WHERE p.proisagg\n",
  					  gettext_noop("Description"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 281,287 ****
  					  "      AND p.proargtypes[0] IS DISTINCT FROM 'pg_catalog.cstring'::pg_catalog.regtype\n"
  					  "      AND NOT p.proisagg\n");
  
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 281,287 ----
  					  "      AND p.proargtypes[0] IS DISTINCT FROM 'pg_catalog.cstring'::pg_catalog.regtype\n"
  					  "      AND NOT p.proisagg\n");
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 372,378 ****
  	else
  		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 */
--- 372,378 ----
  	else
  		appendPQExpBuffer(&buf, "  AND t.typname !~ '^_'\n");
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	/* Match name pattern against either internal or external name */
***************
*** 427,436 ****
  					  gettext_noop("Result type"),
  					  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,
  						  "pg_catalog.pg_operator_is_visible(o.oid)");
  
--- 427,436 ----
  					  gettext_noop("Result type"),
  					  gettext_noop("Description"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
  
! 	processSQLNamePattern(pset.db, &buf, pattern, !showSystem && !pattern, true,
  						  "n.nspname", "o.oprname", NULL,
  						  "pg_catalog.pg_operator_is_visible(o.oid)");
  
***************
*** 620,626 ****
  					  "  WHERE p.proisagg\n",
  					  gettext_noop("aggregate"));
  
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 620,626 ----
  					  "  WHERE p.proisagg\n",
  					  gettext_noop("aggregate"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 643,649 ****
  					  "      AND NOT p.proisagg\n",
  					  gettext_noop("function"));
  
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 643,649 ----
  					  "      AND NOT p.proisagg\n",
  					  gettext_noop("function"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 661,670 ****
  	"       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace\n",
  					  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,
  						  "pg_catalog.pg_operator_is_visible(o.oid)");
  
--- 661,670 ----
  	"       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = o.oprnamespace\n",
  					  gettext_noop("operator"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
   
! 	processSQLNamePattern(pset.db, &buf, pattern, !showSystem && !pattern, false,
  						  "n.nspname", "o.oprname", NULL,
  						  "pg_catalog.pg_operator_is_visible(o.oid)");
  
***************
*** 679,688 ****
  	"       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\n",
  					  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)",
  						  NULL,
  						  "pg_catalog.pg_type_is_visible(t.oid)");
--- 679,688 ----
  	"       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\n",
  					  gettext_noop("data type"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
  
! 	processSQLNamePattern(pset.db, &buf, pattern, !showSystem && !pattern, false,
  						  "n.nspname", "pg_catalog.format_type(t.oid, NULL)",
  						  NULL,
  						  "pg_catalog.pg_type_is_visible(t.oid)");
***************
*** 703,709 ****
  					  gettext_noop("view"),
  					  gettext_noop("index"),
  					  gettext_noop("sequence"));
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 703,709 ----
  					  gettext_noop("view"),
  					  gettext_noop("index"),
  					  gettext_noop("sequence"));
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 723,729 ****
  					  "  WHERE r.rulename != '_RETURN'\n",
  					  gettext_noop("rule"));
  
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	/* XXX not sure what to do about visibility rule here? */
--- 723,729 ----
  					  "  WHERE r.rulename != '_RETURN'\n",
  					  gettext_noop("rule"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	/* XXX not sure what to do about visibility rule here? */
***************
*** 742,752 ****
  				   "       JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid\n"
  	"       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,
  						  "n.nspname", "t.tgname", NULL,
  						  "pg_catalog.pg_table_is_visible(c.oid)");
  
--- 742,752 ----
  				   "       JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid\n"
  	"       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n",
  					  gettext_noop("trigger"));
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
  
  	/* XXX not sure what to do about visibility rule here? */
! 	processSQLNamePattern(pset.db, &buf, pattern, !showSystem && !pattern, false,
  						  "n.nspname", "t.tgname", NULL,
  						  "pg_catalog.pg_table_is_visible(c.oid)");
  
***************
*** 1961,1967 ****
  		appendPQExpBuffer(&buf, "'i',");
  	if (showSeq)
  		appendPQExpBuffer(&buf, "'S',");
! 	if (showSystem && showTables)
  		appendPQExpBuffer(&buf, "'s',");
  	appendPQExpBuffer(&buf, "''");		/* dummy */
  	appendPQExpBuffer(&buf, ")\n");
--- 1961,1967 ----
  		appendPQExpBuffer(&buf, "'i',");
  	if (showSeq)
  		appendPQExpBuffer(&buf, "'S',");
! 	if ((showSystem || pattern) && showTables)
  		appendPQExpBuffer(&buf, "'s',");
  	appendPQExpBuffer(&buf, "''");		/* dummy */
  	appendPQExpBuffer(&buf, ")\n");
***************
*** 1971,1983 ****
  	 * pg_catalog).  Otherwise, suppress system objects, including those in
  	 * pg_catalog and pg_toast.  (We don't want to hide temp tables though.)
  	 */
! 	if (showSystem)
! 		appendPQExpBuffer(&buf,
! 						  "  AND n.nspname = 'pg_catalog'\n");
! 	else
! 		appendPQExpBuffer(&buf,
! 						  "  AND n.nspname <> 'pg_catalog'\n"
! 						  "  AND n.nspname !~ '^pg_toast'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.relname", NULL,
--- 1971,1986 ----
  	 * pg_catalog).  Otherwise, suppress system objects, including those in
  	 * pg_catalog and pg_toast.  (We don't want to hide temp tables though.)
  	 */
! 	if (!pattern)
! 	{
! 		if (showSystem)
! 			appendPQExpBuffer(&buf,
! 							  "  AND n.nspname = 'pg_catalog'\n");
! 		else
! 			appendPQExpBuffer(&buf,
! 							  "  AND n.nspname <> 'pg_catalog'\n"
! 							  "  AND n.nspname !~ '^pg_toast'\n");
! 	}
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
  						  "n.nspname", "c.relname", NULL,
***************
*** 2046,2052 ****
  					  gettext_noop("Modifier"),
  					  gettext_noop("Check"));
  
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 2049,2055 ----
  					  gettext_noop("Modifier"),
  					  gettext_noop("Check"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
***************
*** 2101,2107 ****
  					  gettext_noop("yes"), gettext_noop("no"),
  					  gettext_noop("Default?"));
  
!  	if (!showSystem)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
--- 2104,2110 ----
  					  gettext_noop("yes"), gettext_noop("no"),
  					  gettext_noop("Default?"));
  
!  	if (!showSystem && !pattern)
   		appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n");
  
  	processSQLNamePattern(pset.db, &buf, pattern, true, false,
-- 
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