33 *
44 * Copyright (c) 2000-2003, PostgreSQL Global Development Group
55 *
6- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.89 2003/12/01 22:11:06 momjian Exp $
6+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.90 2003/12/01 22:21:54 momjian Exp $
77 */
88#include "postgres_fe.h"
99#include "describe.h"
@@ -1276,12 +1276,13 @@ describeUsers(const char *pattern)
12761276" WHEN u.usesuper THEN CAST('%s' AS pg_catalog.text)\n"
12771277" WHEN u.usecreatedb THEN CAST('%s' AS pg_catalog.text)\n"
12781278" ELSE CAST('' AS pg_catalog.text)\n"
1279- " END AS \"%s\"\n"
1279+ " END AS \"%s\",\n"
1280+ " ARRAY(SELECT g.groname FROM pg_catalog.pg_group g WHERE u.usesysid = ANY(g.grolist)) as \"%s\"\n"
12801281"FROM pg_catalog.pg_user u\n" ,
12811282_ ("User name" ),_ ("User ID" ),
12821283_ ("superuser, create database" ),
12831284_ ("superuser" ),_ ("create database" ),
1284- _ ("Attributes" ));
1285+ _ ("Attributes" ), _ ( "Groups" ) );
12851286
12861287processNamePattern (& buf ,pattern , false, false,
12871288NULL ,"u.usename" ,NULL ,NULL );
@@ -1303,6 +1304,46 @@ describeUsers(const char *pattern)
13031304}
13041305
13051306
1307+ /*
1308+ * \dg
1309+ *
1310+ * Describes groups.
1311+ */
1312+ bool
1313+ describeGroups (const char * pattern )
1314+ {
1315+ PQExpBufferData buf ;
1316+ PGresult * res ;
1317+ printQueryOpt myopt = pset .popt ;
1318+
1319+ initPQExpBuffer (& buf );
1320+
1321+ printfPQExpBuffer (& buf ,
1322+ "SELECT g.groname AS \"%s\",\n"
1323+ " g.grosysid AS \"%s\"\n"
1324+ "FROM pg_catalog.pg_group g\n" ,
1325+ _ ("Group name" ),_ ("Group ID" ));
1326+
1327+ processNamePattern (& buf ,pattern , false, false,
1328+ NULL ,"g.groname" ,NULL ,NULL );
1329+
1330+ appendPQExpBuffer (& buf ,"ORDER BY 1;" );
1331+
1332+ res = PSQLexec (buf .data , false);
1333+ termPQExpBuffer (& buf );
1334+ if (!res )
1335+ return false;
1336+
1337+ myopt .nullPrint = NULL ;
1338+ myopt .title = _ ("List of database groups" );
1339+
1340+ printQuery (res ,& myopt ,pset .queryFout );
1341+
1342+ PQclear (res );
1343+ return true;
1344+ }
1345+
1346+
13061347/*
13071348 * listTables()
13081349 *