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);