mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Add psql \dD listing of domains, from Jonathan Eisler.
This commit is contained in:
		
							parent
							
								
									d3788c3305
								
							
						
					
					
						commit
						a7ade2bb6b
					
				| @ -1,5 +1,5 @@ | ||||
| <!-- | ||||
| $Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.63 2002/03/11 05:03:52 petere Exp $ | ||||
| $Header: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.64 2002/03/19 02:32:19 momjian Exp $ | ||||
| PostgreSQL documentation | ||||
| --> | ||||
| 
 | ||||
| @ -415,6 +415,29 @@ testdb=> | ||||
|       </varlistentry> | ||||
| 
 | ||||
| 
 | ||||
|       <varlistentry> | ||||
|         <term><literal>\dD</literal> [ <replaceable class="parameter">pattern</replaceable> ]</term> | ||||
|         <listitem> | ||||
|         <para> | ||||
|         Lists all database domains. | ||||
|         </para> | ||||
| 
 | ||||
|         <para> | ||||
|         Descriptions for objects can be generated with the <command>COMMENT ON</command> | ||||
|         <acronym>SQL</acronym> command. | ||||
| 	</para> | ||||
| 
 | ||||
|         <note> | ||||
|         <para> | ||||
|         <productname>PostgreSQL</productname> stores the object descriptions in the | ||||
|         pg_description system table. | ||||
|         </para> | ||||
|         </note> | ||||
| 
 | ||||
|         </listitem> | ||||
|       </varlistentry> | ||||
| 
 | ||||
| 
 | ||||
|       <varlistentry> | ||||
|         <term><literal>\df [ <replaceable class="parameter">pattern</replaceable> ]</literal></term> | ||||
| 
 | ||||
|  | ||||
| @ -3,7 +3,7 @@ | ||||
|  * | ||||
|  * Copyright 2000 by PostgreSQL Global Development Group | ||||
|  * | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.69 2002/03/07 17:54:39 momjian Exp $ | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.70 2002/03/19 02:32:21 momjian Exp $ | ||||
|  */ | ||||
| #include "postgres_fe.h" | ||||
| #include "command.h" | ||||
| @ -380,6 +380,10 @@ exec_command(const char *cmd, | ||||
| 			case 'u': | ||||
| 				success = describeUsers(name); | ||||
| 				break; | ||||
| 			case 'D': | ||||
| 				success = listDomains(name); | ||||
| 				break; | ||||
| 
 | ||||
| 			default: | ||||
| 				status = CMD_UNKNOWN; | ||||
| 		} | ||||
|  | ||||
| @ -3,7 +3,7 @@ | ||||
|  * | ||||
|  * Copyright 2000 by PostgreSQL Global Development Group | ||||
|  * | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.45 2002/03/07 17:54:39 momjian Exp $ | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.46 2002/03/19 02:32:21 momjian Exp $ | ||||
|  */ | ||||
| #include "postgres_fe.h" | ||||
| #include "describe.h" | ||||
| @ -1036,3 +1036,51 @@ listTables(const char *infotype, const char *name, bool desc) | ||||
| 	PQclear(res); | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * \dD [domain] | ||||
|  * | ||||
|  * Describes domains, possibly based on a simplistic prefix search on the | ||||
|  * argument. | ||||
|  */ | ||||
| 
 | ||||
| bool | ||||
| listDomains(const char *name) | ||||
| { | ||||
| 	char		buf[512 + REGEXP_CUTOFF]; | ||||
| 	PGresult   *res; | ||||
| 	printQueryOpt myopt = pset.popt; | ||||
| 
 | ||||
| 	snprintf(buf, sizeof(buf), | ||||
| 		 "SELECT t.typname as \"%s\",\n" | ||||
| 		 "       format_type( t.typbasetype, t.typmod) as \"%s\",\n" | ||||
| 		 "       CASE WHEN t.typnotnull AND t.typdefault IS NOT NULL THEN 'not null default '||t.typdefault\n" | ||||
| 		 "            WHEN t.typnotnull AND t.typdefault IS NULL THEN 'not null'\n" | ||||
| 		 "            WHEN NOT t.typnotnull AND t.typdefault IS NOT NULL THEN 'default '||t.typdefault\n" | ||||
| 		 "            ELSE ''\n" | ||||
| 		 "       END as \"%s\"\n" | ||||
| 		 "FROM pg_type t\n" | ||||
| 		 "WHERE t.typtype = 'd'\n", | ||||
| 		 _("Name"), | ||||
| 		 _("Type"), | ||||
| 		 _("Modifier")); | ||||
| 	if (name) | ||||
| 	{ | ||||
| 		strcat(buf, "AND t.typname ~ '^"); | ||||
| 		strncat(buf, name, REGEXP_CUTOFF); | ||||
| 		strcat(buf, "'\n"); | ||||
| 	} | ||||
| 	strcat(buf, "ORDER BY 1;"); | ||||
| 
 | ||||
| 	res = PSQLexec(buf); | ||||
| 	if (!res) | ||||
| 		return false; | ||||
| 
 | ||||
| 	myopt.nullPrint = NULL; | ||||
| 	myopt.title = _("List of database domains"); | ||||
| 
 | ||||
| 	printQuery(res, &myopt, pset.queryFout); | ||||
| 
 | ||||
| 	PQclear(res); | ||||
| 	return true; | ||||
| } | ||||
|  | ||||
| @ -3,7 +3,7 @@ | ||||
|  * | ||||
|  * Copyright 2000 by PostgreSQL Global Development Group | ||||
|  * | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/describe.h,v 1.15 2002/03/07 17:54:41 momjian Exp $ | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/describe.h,v 1.16 2002/03/19 02:32:21 momjian Exp $ | ||||
|  */ | ||||
| #ifndef DESCRIBE_H | ||||
| #define DESCRIBE_H | ||||
| @ -40,4 +40,7 @@ bool		listAllDbs(bool desc); | ||||
| /* \dt, \di, \ds, \dS, etc. */ | ||||
| bool		listTables(const char *infotype, const char *name, bool desc); | ||||
| 
 | ||||
| /* \dD */ | ||||
| bool		listDomains(const char *name); | ||||
| 
 | ||||
| #endif   /* DESCRIBE_H */ | ||||
|  | ||||
| @ -3,7 +3,7 @@ | ||||
|  * | ||||
|  * Copyright 2000 by PostgreSQL Global Development Group | ||||
|  * | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.48 2002/03/11 18:26:20 momjian Exp $ | ||||
|  * $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.49 2002/03/19 02:32:21 momjian Exp $ | ||||
|  */ | ||||
| #include "postgres_fe.h" | ||||
| #include "help.h" | ||||
| @ -202,6 +202,7 @@ slashUsage(void) | ||||
| 	fprintf(fout, _(" \\d{p|S|l}      list access privileges, system tables, or large objects\n")); | ||||
| 	fprintf(fout, _(" \\da            list aggregate functions\n")); | ||||
| 	fprintf(fout, _(" \\dd [NAME]     show comment for table, type, function, or operator\n")); | ||||
| 	fprintf(fout, _(" \\dD [NAME]     list domains\n")); | ||||
| 	fprintf(fout, _(" \\df            list functions\n")); | ||||
| 	fprintf(fout, _(" \\do            list operators\n")); | ||||
| 	fprintf(fout, _(" \\dT            list data types\n")); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user