aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml9
-rw-r--r--src/bin/psql/command.c2
-rw-r--r--src/bin/psql/describe.c13
-rw-r--r--src/bin/psql/describe.h2
4 files changed, 15 insertions, 11 deletions
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index eb716cf6f09..d44fc56b37e 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1232,16 +1232,17 @@ testdb=>
<varlistentry>
- <term><literal>\dn[+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
+ <term><literal>\dn[S+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
<listitem>
<para>
Lists schemas (namespaces). If <replaceable
class="parameter">pattern</replaceable>
is specified, only schemas whose names match the pattern are listed.
- Non-local temporary schemas are suppressed. If <literal>+</literal>
- is appended to the command name, each object is listed with its associated
- permissions and description, if any.
+ By default, only user-created objects are shown; supply a
+ pattern or the <literal>S</literal> modifier to include system objects.
+ If <literal>+</literal> is appended to the command name, each object
+ is listed with its associated permissions and description, if any.
</para>
</listitem>
</varlistentry>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index fe37be66f2a..c1edf44a607 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -417,7 +417,7 @@ exec_command(const char *cmd,
success = do_lo_list();
break;
case 'n':
- success = listSchemas(pattern, show_verbose);
+ success = listSchemas(pattern, show_verbose, show_system);
break;
case 'o':
success = describeOperators(pattern, show_system);
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index b705cb29dd4..c4370a1dd39 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -2697,7 +2697,7 @@ listCasts(const char *pattern)
* Describes schemas (namespaces)
*/
bool
-listSchemas(const char *pattern, bool verbose)
+listSchemas(const char *pattern, bool verbose, bool showSystem)
{
PQExpBufferData buf;
PGresult *res;
@@ -2720,11 +2720,14 @@ listSchemas(const char *pattern, bool verbose)
}
appendPQExpBuffer(&buf,
- "\nFROM pg_catalog.pg_namespace n\n"
- "WHERE (n.nspname !~ '^pg_temp_' OR\n"
- " n.nspname = (pg_catalog.current_schemas(true))[1])\n"); /* temp schema is first */
+ "\nFROM pg_catalog.pg_namespace n\n");
- processSQLNamePattern(pset.db, &buf, pattern, true, false,
+ if (!showSystem && !pattern)
+ appendPQExpBuffer(&buf,
+ "WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'\n");
+
+ processSQLNamePattern(pset.db, &buf, pattern,
+ !showSystem && !pattern, false,
NULL, "n.nspname", NULL,
NULL);
diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h
index ddf4aac482b..6a6abdba471 100644
--- a/src/bin/psql/describe.h
+++ b/src/bin/psql/describe.h
@@ -70,7 +70,7 @@ extern bool listConversions(const char *pattern, bool showSystem);
extern bool listCasts(const char *pattern);
/* \dn */
-extern bool listSchemas(const char *pattern, bool verbose);
+extern bool listSchemas(const char *pattern, bool verbose, bool showSystem);
/* \dew */
extern bool listForeignDataWrappers(const char *pattern, bool verbose);