aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-03-19 02:32:21 +0000
committerBruce Momjian <bruce@momjian.us>2002-03-19 02:32:21 +0000
commita7ade2bb6b85def8deb30e44c56e80d38e9b9614 (patch)
treeac24117f3f556455f121dae9eac8b7789372623b
parentd3788c330517af301576a14bdd71f26da3b0e1c0 (diff)
downloadpostgresql-a7ade2bb6b85def8deb30e44c56e80d38e9b9614.tar.gz
postgresql-a7ade2bb6b85def8deb30e44c56e80d38e9b9614.zip
Add psql \dD listing of domains, from Jonathan Eisler.
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml25
-rw-r--r--src/bin/psql/command.c6
-rw-r--r--src/bin/psql/describe.c50
-rw-r--r--src/bin/psql/describe.h5
-rw-r--r--src/bin/psql/help.c3
5 files changed, 84 insertions, 5 deletions
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 84f783392e6..350128fa724 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -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
-->
@@ -416,6 +416,29 @@ testdb=>
<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>
<listitem>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index a9ca4b30b96..97f58dc3f61 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -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;
}
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 8a6eca490d8..c45b81c7a82 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -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;
+}
diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h
index d179ffced56..4c95733912a 100644
--- a/src/bin/psql/describe.h
+++ b/src/bin/psql/describe.h
@@ -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 */
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 3560c261b19..3d71a315083 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -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"));