summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2009-01-20 02:13:42 +0000
committerBruce Momjian2009-01-20 02:13:42 +0000
commit20870951c86300a6eeace523f32c11760150f74f (patch)
tree22e70937963565d2ccbdda80de84968a14668acd
parent35f2326e8c794aa97251763e95e527d832412658 (diff)
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.
-rw-r--r--src/bin/psql/command.c6
-rw-r--r--src/bin/psql/describe.c20
-rw-r--r--src/bin/psql/describe.h2
3 files changed, 12 insertions, 16 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index f1bdb49dc8..6d6e187601 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -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 2ac1cd1586..75d4620599 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -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 dfba6f64c4..57e5c7b3ac 100644
--- a/src/bin/psql/describe.h
+++ b/src/bin/psql/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);