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=> - \dn[+] [ pattern ] + \dn[S+] [ pattern ] Lists schemas (namespaces). If pattern is specified, only schemas whose names match the pattern are listed. - Non-local temporary schemas are suppressed. If + - 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 S modifier to include system objects. + If + is appended to the command name, each object + is listed with its associated permissions and description, if any. 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);