diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index cae763af0b..b398251745 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ @@ -904,6 +904,17 @@ testdb=> + + \dg [ pattern ] + + + Lists all database groups or only those that match pattern. + + + + + \distvS [ pattern ] diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index fda770f9dc..67d0ad7b3b 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.107 2003/12/01 22:14:40 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.108 2003/12/01 22:21:54 momjian Exp $ */ #include "postgres_fe.h" #include "command.h" @@ -359,6 +359,9 @@ exec_command(const char *cmd, case 'f': success = describeFunctions(pattern, show_verbose); break; + case 'g': + success = describeGroups(pattern); + break; case 'l': success = do_lo_list(); break; diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 327dd69a3c..66a7d7b5d2 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.89 2003/12/01 22:11:06 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.90 2003/12/01 22:21:54 momjian Exp $ */ #include "postgres_fe.h" #include "describe.h" @@ -1276,12 +1276,13 @@ describeUsers(const char *pattern) " WHEN u.usesuper THEN CAST('%s' AS pg_catalog.text)\n" " WHEN u.usecreatedb THEN CAST('%s' AS pg_catalog.text)\n" " ELSE CAST('' AS pg_catalog.text)\n" - " END AS \"%s\"\n" + " END AS \"%s\",\n" + " ARRAY(SELECT g.groname FROM pg_catalog.pg_group g WHERE u.usesysid = ANY(g.grolist)) as \"%s\"\n" "FROM pg_catalog.pg_user u\n", _("User name"), _("User ID"), _("superuser, create database"), _("superuser"), _("create database"), - _("Attributes")); + _("Attributes"), _("Groups")); processNamePattern(&buf, pattern, false, false, NULL, "u.usename", NULL, NULL); @@ -1303,6 +1304,46 @@ describeUsers(const char *pattern) } +/* + * \dg + * + * Describes groups. + */ +bool +describeGroups(const char *pattern) +{ + PQExpBufferData buf; + PGresult *res; + printQueryOpt myopt = pset.popt; + + initPQExpBuffer(&buf); + + printfPQExpBuffer(&buf, + "SELECT g.groname AS \"%s\",\n" + " g.grosysid AS \"%s\"\n" + "FROM pg_catalog.pg_group g\n", + _("Group name"), _("Group ID")); + + processNamePattern(&buf, pattern, false, false, + NULL, "g.groname", NULL, NULL); + + appendPQExpBuffer(&buf, "ORDER BY 1;"); + + res = PSQLexec(buf.data, false); + termPQExpBuffer(&buf); + if (!res) + return false; + + myopt.nullPrint = NULL; + myopt.title = _("List of database groups"); + + printQuery(res, &myopt, pset.queryFout); + + PQclear(res); + return true; +} + + /* * listTables() * diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h index e5c9460e9f..acc841a02b 100644 --- a/src/bin/psql/describe.h +++ b/src/bin/psql/describe.h @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/describe.h,v 1.22 2003/11/29 19:52:06 pgsql Exp $ + * $PostgreSQL: pgsql/src/bin/psql/describe.h,v 1.23 2003/12/01 22:21:54 momjian Exp $ */ #ifndef DESCRIBE_H #define DESCRIBE_H @@ -25,6 +25,9 @@ bool describeOperators(const char *pattern); /* \du */ bool describeUsers(const char *pattern); +/* \dg */ +bool describeGroups(const char *pattern); + /* \z (or \dp) */ bool permissionsList(const char *pattern); diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index 168ddf3716..f36c71a56d 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.82 2003/11/29 19:52:06 pgsql Exp $ + * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.83 2003/12/01 22:21:54 momjian Exp $ */ #include "postgres_fe.h" #include "common.h" @@ -216,6 +216,7 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\dd [PATTERN] show comment for object\n")); fprintf(output, _(" \\dD [PATTERN] list domains\n")); fprintf(output, _(" \\df [PATTERN] list functions (add \"+\" for more detail)\n")); + fprintf(output, _(" \\dg [PATTERN] list groups\n")); fprintf(output, _(" \\dn [PATTERN] list schemas\n")); fprintf(output, _(" \\do [NAME] list operators\n")); fprintf(output, _(" \\dl list large objects, same as \\lo_list\n")); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index b6ae2ce865..955e70deb8 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2003, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.96 2003/12/01 22:14:40 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.97 2003/12/01 22:21:54 momjian Exp $ */ /*---------------------------------------------------------------------- @@ -576,7 +576,7 @@ psql_completion(char *text, int start, int end) static const char * const backslash_commands[] = { "\\a", "\\connect", "\\C", "\\cd", "\\copy", "\\copyright", - "\\d", "\\da", "\\dc", "\\dC", "\\dd", "\\dD", "\\df", "\\di", + "\\d", "\\da", "\\dc", "\\dC", "\\dd", "\\dD", "\\df", "\\dg", "\\di", "\\dl", "\\dn", "\\do", "\\dp", "\\ds", "\\dS", "\\dt", "\\dT", "\\dv", "\\du", "\\e", "\\echo", "\\encoding",