Tom Lane escribió:

> BTW, have we thought much about the simplest possible solution,
> which is to not have the view?  How badly do we need it?  Seems
> like dropping the functionality into a psql \d command might be
> a viable alternative.

FWIW I came up with a preliminary patch for a new psql command \dus that
shows settings.  It takes a pattern that's used to constrain on roles.
Thus there is no way to view settings for a database.  If there's a need
for that we could use another command, say \dls.

Sample output

alvherre=# \dus fo*
            List of settings
 role | database |       settings        
------+----------+-----------------------
 fob  |          | log_duration=true
 foo  | alvherre | work_mem=256MB
                 : statement_timeout=10s
 foo  |          | work_mem=512MB
                 : statement_timeout=1s
(3 rows)


-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
*** src/bin/psql/command.c	13 Sep 2009 22:18:22 -0000	1.207
--- src/bin/psql/command.c	30 Sep 2009 19:28:07 -0000
***************
*** 409,415 ****
  				success = listTables(&cmd[1], pattern, show_verbose, show_system);
  				break;
  			case 'u':
! 				success = describeRoles(pattern, show_verbose);
  				break;
  			case 'F':			/* text search subsystem */
  				switch (cmd[2])
--- 409,418 ----
  				success = listTables(&cmd[1], pattern, show_verbose, show_system);
  				break;
  			case 'u':
! 				if (cmd[2] && cmd[2] == 's')
! 					success = listRoleSettings(pattern);
! 				else
! 					success = describeRoles(pattern, show_verbose);
  				break;
  			case 'F':			/* text search subsystem */
  				switch (cmd[2])
*** src/bin/psql/describe.c	29 Jul 2009 20:56:19 -0000	1.226
--- src/bin/psql/describe.c	30 Sep 2009 19:54:42 -0000
***************
*** 2176,2181 ****
--- 2176,2232 ----
  	appendPQExpBufferStr(buf, str);
  }
  
+ /*
+  * \dus
+  */
+ bool
+ listRoleSettings(const char *pattern)
+ {
+ 	PQExpBufferData	buf;
+ 	PGresult	   *res;
+ 	printQueryOpt myopt = pset.popt;
+ 
+ 	initPQExpBuffer(&buf);
+ 
+ 	if (pset.sversion >= 80500)
+ 	{
+ 		printfPQExpBuffer(&buf, "SELECT rolname AS role, datname AS database,\n"
+ 						  "pg_catalog.array_to_string(setconfig, E'\\n') AS settings\n"
+ 						  "FROM pg_db_role_setting AS s\n"
+ 						  "LEFT JOIN pg_database ON pg_database.oid = setdatabase\n"
+ 						  "LEFT JOIN pg_roles ON pg_roles.oid = setrole ");
+ 		processSQLNamePattern(pset.db, &buf, pattern, false, false,
+ 							  NULL, "pg_roles.rolname", NULL, NULL);
+ 		appendPQExpBufferStr(&buf, " ORDER BY role, database");
+ 	}
+ 	else
+ 		return false;
+ 
+ 	res = PSQLexec(buf.data, false);
+ 	if (!res)
+ 		return false;
+ 
+ 	if (PQntuples(res) == 0 && !pset.quiet)
+ 	{
+ 		if (pattern)
+ 			fprintf(pset.queryFout, _("No matching roles found.\n"));
+ 		else
+ 			fprintf(pset.queryFout, _("No settings found.\n"));
+ 	}
+ 	else
+ 	{
+ 		myopt.nullPrint = NULL;
+ 		myopt.title = _("List of settings");
+ 		myopt.translate_header = true;
+ 
+ 		printQuery(res, &myopt, pset.queryFout, pset.logfile);
+ 	}
+ 
+ 	PQclear(res);
+ 	resetPQExpBuffer(&buf);
+ 	return true;
+ }
+ 
  
  /*
   * listTables()
*** src/bin/psql/describe.h	21 Apr 2009 15:49:06 -0000	1.40
--- src/bin/psql/describe.h	30 Sep 2009 19:29:20 -0000
***************
*** 27,32 ****
--- 27,35 ----
  /* \du, \dg */
  extern bool describeRoles(const char *pattern, bool verbose);
  
+ /* \dus */
+ extern bool listRoleSettings(const char *pattern);
+ 
  /* \z (or \dp) */
  extern bool permissionsList(const char *pattern);
  
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to