From: Bruce Momjian <bruce@momjian.us>
Date: Tue, 20 Jan 2009 02:13:42 +0000 (+0000)
Subject: Make psql \d and \dt consistent for system tables, i.e prevent \d from
X-Git-Tag: REL8_4_BETA1~361
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=71928e7b9ff500ce1c183287b6f8e2705841532d;p=postgresql

Make psql \d and \dt consistent for system tables, i.e prevent \d from
showing system tables, make \dS pattern show system table details, and
have \dtS show system and _user_ tables, to be consistent with other \d*
commands.
---

diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 0788bb8e71..41888666de 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2009, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.201 2009/01/06 21:10:30 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.202 2009/01/20 02:13:42 momjian Exp $
  */
 #include "postgres_fe.h"
 #include "command.h"
@@ -334,14 +334,15 @@ exec_command(const char *cmd,
 										 OT_NORMAL, NULL, true);
 
 		show_verbose = strchr(cmd, '+') ? true : false;
-		show_system = strchr(cmd, 'S') ? true: false;
+		show_system = strchr(cmd, 'S') ? true : false;
 
 		switch (cmd[1])
 		{
 			case '\0':
 			case '+':
+			case 'S':
 				if (pattern)
-					success = describeTableDetails(pattern, show_verbose);
+					success = describeTableDetails(pattern, show_verbose, show_system);
 				else
 					/* standard listing of interesting things */
 					success = listTables("tvs", NULL, show_verbose, show_system);
@@ -390,7 +391,6 @@ exec_command(const char *cmd,
 			case 'v':
 			case 'i':
 			case 's':
-			case 'S':
 				success = listTables(&cmd[1], pattern, show_verbose, show_system);
 				break;
 			case 'u':
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 1ff7513e8e..01cb9bee4b 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -8,7 +8,7 @@
  *
  * Copyright (c) 2000-2009, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.196 2009/01/19 18:44:32 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.197 2009/01/20 02:13:42 momjian Exp $
  */
 #include "postgres_fe.h"
 
@@ -782,7 +782,7 @@ objectDescription(const char *pattern, bool showSystem)
  * verbose: if true, this is \d+
  */
 bool
-describeTableDetails(const char *pattern, bool verbose)
+describeTableDetails(const char *pattern, bool verbose, bool showSystem)
 {
 	PQExpBufferData buf;
 	PGresult   *res;
@@ -797,7 +797,10 @@ describeTableDetails(const char *pattern, bool verbose)
 					  "FROM pg_catalog.pg_class c\n"
 	 "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n");
 
-	processSQLNamePattern(pset.db, &buf, pattern, false, false,
+ 	if (!showSystem)
+ 		appendPQExpBuffer(&buf, "      WHERE n.nspname <> 'pg_catalog'\n");
+
+	processSQLNamePattern(pset.db, &buf, pattern, !showSystem, false,
 						  "n.nspname", "c.relname", NULL,
 						  "pg_catalog.pg_table_is_visible(c.oid)");
 
@@ -1961,20 +1964,13 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
 		appendPQExpBuffer(&buf, "'i',");
 	if (showSeq)
 		appendPQExpBuffer(&buf, "'S',");
-	if (showSystem && showTables)
+	if (showSystem)
 		appendPQExpBuffer(&buf, "'s',");	/* was RELKIND_SPECIAL in <= 8.1.X */
 	appendPQExpBuffer(&buf, "''");		/* dummy */
 	appendPQExpBuffer(&buf, ")\n");
 
-	/*
-	 * If showSystem is specified, show only system objects (those in
-	 * 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
+	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");
diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h
index e45f7ac56c..95c70a842d 100644
--- a/src/bin/psql/describe.h
+++ b/src/bin/psql/describe.h
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2009, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/describe.h,v 1.38 2009/01/06 21:10:30 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.h,v 1.39 2009/01/20 02:13:42 momjian Exp $
  */
 #ifndef DESCRIBE_H
 #define DESCRIBE_H
@@ -34,7 +34,7 @@ extern bool permissionsList(const char *pattern);
 extern bool objectDescription(const char *pattern, bool showSystem);
 
 /* \d foo */
-extern bool describeTableDetails(const char *pattern, bool verbose);
+extern bool describeTableDetails(const char *pattern, bool verbose, bool showSystem);
 
 /* \dF */
 extern bool listTSConfigs(const char *pattern, bool verbose);