]> granicus.if.org Git - postgresql/commitdiff
Teach psql to display the comments on conversions and domains.
authorRobert Haas <rhaas@postgresql.org>
Mon, 8 Aug 2011 16:26:13 +0000 (12:26 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 8 Aug 2011 16:26:13 +0000 (12:26 -0400)
\dc and \dD now accept a "+" option, which will cause the comments to
be displayed.  Along the way, correct a few oversights in the previous
commit in this area, 3b17efdfdd846c9bfad1637686e6f18198ea3df5 - namely,
(1) when \dL+ is used, make description still be the last column, for
consistency with what we've done elsewhere; and (2) document the
difference between \dC and \dC+.

Josh Kupershmidt, with a couple of doc changes by me.

doc/src/sgml/ref/psql-ref.sgml
src/bin/psql/command.c
src/bin/psql/describe.c
src/bin/psql/describe.h
src/bin/psql/help.c

index e2e2abe4d39ea1020f317acfa9d93acc15a7f1c8..4a38d2afeb12af12eb3a692317932ca52e7ed9f4 100644 (file)
@@ -954,7 +954,7 @@ testdb=&gt;
 
 
       <varlistentry>
-        <term><literal>\dc[S] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
+        <term><literal>\dc[S+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
         <listitem>
         <para>
         Lists conversions between character-set encodings.
@@ -964,6 +964,8 @@ testdb=&gt;
         By default, only user-created objects are shown;  supply a
         pattern or the <literal>S</literal> modifier to include system
         objects.
+        If <literal>+</literal> is appended to the command name, each object
+        is listed with its associated description.
         </para>
         </listitem>
       </varlistentry>
@@ -977,6 +979,8 @@ testdb=&gt;
         If <replaceable class="parameter">pattern</replaceable>
         is specified, only casts whose source or target types match the
         pattern are listed.
+        If <literal>+</literal> is appended to the command name, each object
+        is listed with its associated description.
         </para>
         </listitem>
       </varlistentry>
@@ -1038,7 +1042,7 @@ testdb=&gt;
 
 
       <varlistentry>
-        <term><literal>\dD[S] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
+        <term><literal>\dD[S+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
         <listitem>
         <para>
         Lists domains. If <replaceable
@@ -1047,6 +1051,8 @@ testdb=&gt;
         By default, only user-created objects are shown;  supply a
         pattern or the <literal>S</literal> modifier to include system
         objects.
+        If <literal>+</literal> is appended to the command name, each object
+        is listed with its associated description.
         </para>
         </listitem>
       </varlistentry>
index 84e031dd53eee6f69faea1dd916482df3eaaae2b..d6a925e435bf697019e508c25de5a46d655776be 100644 (file)
@@ -378,7 +378,7 @@ exec_command(const char *cmd,
                                success = describeTablespaces(pattern, show_verbose);
                                break;
                        case 'c':
-                               success = listConversions(pattern, show_system);
+                               success = listConversions(pattern, show_verbose, show_system);
                                break;
                        case 'C':
                                success = listCasts(pattern, show_verbose);
@@ -390,7 +390,7 @@ exec_command(const char *cmd,
                                        success = objectDescription(pattern, show_system);
                                break;
                        case 'D':
-                               success = listDomains(pattern, show_system);
+                               success = listDomains(pattern, show_verbose, show_system);
                                break;
                        case 'f':                       /* function subsystem */
                                switch (cmd[2])
index a8d5ddc96c22d05f2536dd1e75a2e36c9ac8e6cb..5587721ea8f0c4b040e5dfe833849f012a4896fb 100644 (file)
@@ -2665,10 +2665,8 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
                                                  gettext_noop("Owner"));
 
        appendPQExpBuffer(&buf,
-                                         "       l.lanpltrusted AS \"%s\",\n"
-                                         "       d.description AS \"%s\"",
-                                         gettext_noop("Trusted"),
-                                         gettext_noop("Description"));
+                                         "       l.lanpltrusted AS \"%s\"",
+                                         gettext_noop("Trusted"));
 
        if (verbose)
        {
@@ -2686,10 +2684,12 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
        }
 
        appendPQExpBuffer(&buf,
+                                         ",\n       d.description AS \"%s\""
                                          "\nFROM pg_catalog.pg_language l\n"
                                          "LEFT JOIN pg_catalog.pg_description d\n"
                                          "  ON d.classoid = l.tableoid AND d.objoid = l.oid\n"
-                                         "  AND d.objsubid = 0\n");
+                                         "  AND d.objsubid = 0\n",
+                                         gettext_noop("Description"));
 
        if (pattern)
                processSQLNamePattern(pset.db, &buf, pattern, false, false,
@@ -2723,7 +2723,7 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
  * Describes domains.
  */
 bool
-listDomains(const char *pattern, bool showSystem)
+listDomains(const char *pattern, bool verbose, bool showSystem)
 {
        PQExpBufferData buf;
        PGresult   *res;
@@ -2746,17 +2746,30 @@ listDomains(const char *pattern, bool showSystem)
        appendPQExpBuffer(&buf,
           "            CASE WHEN t.typnotnull THEN ' not null' ELSE '' END ||\n"
                                          "            CASE WHEN t.typdefault IS NOT NULL THEN ' default ' || t.typdefault ELSE '' END\n"
-                                         "       ) as \"%s\",\n",
-                                         gettext_noop("Modifier"));
-       appendPQExpBuffer(&buf,
+                                         "       ) as \"%s\",\n"
                                          "       pg_catalog.array_to_string(ARRAY(\n"
                                          "         SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM pg_catalog.pg_constraint r WHERE t.oid = r.contypid\n"
-                                         "       ), ' ') as \"%s\"\n"
-                                         "FROM pg_catalog.pg_type t\n"
-          "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\n"
-                                         "WHERE t.typtype = 'd'\n",
+                                         "       ), ' ') as \"%s\"",
+                                         gettext_noop("Modifier"),
                                          gettext_noop("Check"));
 
+       if (verbose)
+               appendPQExpBuffer(&buf,
+                                                 ",\n       d.description as \"%s\"",
+                                                 gettext_noop("Description"));
+
+       appendPQExpBuffer(&buf,
+                                         "\nFROM pg_catalog.pg_type t\n"
+          "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace\n");
+
+       if (verbose)
+               appendPQExpBuffer(&buf,
+                                                 "     LEFT JOIN pg_catalog.pg_description d "
+                                                 "ON d.classoid = t.tableoid AND d.objoid = t.oid "
+                                                 "AND d.objsubid = 0\n");
+
+       appendPQExpBuffer(&buf, "WHERE t.typtype = 'd'\n");
+
        if (!showSystem && !pattern)
                appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n"
                                                  "      AND n.nspname <> 'information_schema'\n");
@@ -2788,7 +2801,7 @@ listDomains(const char *pattern, bool showSystem)
  * Describes conversions.
  */
 bool
-listConversions(const char *pattern, bool showSystem)
+listConversions(const char *pattern, bool verbose, bool showSystem)
 {
        PQExpBufferData buf;
        PGresult   *res;
@@ -2803,9 +2816,7 @@ listConversions(const char *pattern, bool showSystem)
           "       pg_catalog.pg_encoding_to_char(c.conforencoding) AS \"%s\",\n"
                "       pg_catalog.pg_encoding_to_char(c.contoencoding) AS \"%s\",\n"
                                          "       CASE WHEN c.condefault THEN '%s'\n"
-                                         "       ELSE '%s' END AS \"%s\"\n"
-                          "FROM pg_catalog.pg_conversion c, pg_catalog.pg_namespace n\n"
-                                         "WHERE n.oid = c.connamespace\n",
+                                         "       ELSE '%s' END AS \"%s\"",
                                          gettext_noop("Schema"),
                                          gettext_noop("Name"),
                                          gettext_noop("Source"),
@@ -2813,9 +2824,28 @@ listConversions(const char *pattern, bool showSystem)
                                          gettext_noop("yes"), gettext_noop("no"),
                                          gettext_noop("Default?"));
 
+       if (verbose)
+               appendPQExpBuffer(&buf,
+                                                 ",\n       d.description AS \"%s\"",
+                                                 gettext_noop("Description"));
+
+       appendPQExpBuffer(&buf,
+                                         "\nFROM pg_catalog.pg_conversion c\n"
+                                         "     JOIN pg_catalog.pg_namespace n "
+                                         "ON n.oid = c.connamespace\n");
+
+       if (verbose)
+               appendPQExpBuffer(&buf,
+                                                 "LEFT JOIN pg_catalog.pg_description d "
+                                                 "ON d.classoid = c.tableoid\n"
+                                                 "          AND d.objoid = c.oid "
+                                                 "AND d.objsubid = 0\n");
+
+       appendPQExpBuffer(&buf, "WHERE true\n");
+
        if (!showSystem && !pattern)
-               appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n"
-                                                 "      AND n.nspname <> 'information_schema'\n");
+               appendPQExpBuffer(&buf, "  AND n.nspname <> 'pg_catalog'\n"
+                                                 "  AND n.nspname <> 'information_schema'\n");
 
        processSQLNamePattern(pset.db, &buf, pattern, true, false,
                                                  "n.nspname", "c.conname", NULL,
index 7dc9a2c1548515d8896261097ad8ccc9be6c771f..bf4c31265e7c583d45fe19cd54c52d15f309a0c3 100644 (file)
@@ -61,10 +61,10 @@ extern bool listAllDbs(bool verbose);
 extern bool listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSystem);
 
 /* \dD */
-extern bool listDomains(const char *pattern, bool showSystem);
+extern bool listDomains(const char *pattern, bool verbose, bool showSystem);
 
 /* \dc */
-extern bool listConversions(const char *pattern, bool showSystem);
+extern bool listConversions(const char *pattern, bool verbose, bool showSystem);
 
 /* \dC */
 extern bool listCasts(const char *pattern, bool verbose);
index d3b8c170fa95374e768937a0b62e8d099f697bef..b99ba3acfb531868e31f44a46638ffb94f17db84 100644 (file)
@@ -195,11 +195,11 @@ slashUsage(unsigned short int pager)
        fprintf(output, _("  \\d[S+]  NAME           describe table, view, sequence, or index\n"));
        fprintf(output, _("  \\da[S]  [PATTERN]      list aggregates\n"));
        fprintf(output, _("  \\db[+]  [PATTERN]      list tablespaces\n"));
-       fprintf(output, _("  \\dc[S [PATTERN]      list conversions\n"));
+       fprintf(output, _("  \\dc[S+] [PATTERN]      list conversions\n"));
        fprintf(output, _("  \\dC[+]  [PATTERN]      list casts\n"));
        fprintf(output, _("  \\dd[S]  [PATTERN]      show comments on objects\n"));
        fprintf(output, _("  \\ddp    [PATTERN]      list default privileges\n"));
-       fprintf(output, _("  \\dD[S [PATTERN]      list domains\n"));
+       fprintf(output, _("  \\dD[S+] [PATTERN]      list domains\n"));
        fprintf(output, _("  \\det[+] [PATTERN]      list foreign tables\n"));
        fprintf(output, _("  \\des[+] [PATTERN]      list foreign servers\n"));
        fprintf(output, _("  \\deu[+] [PATTERN]      list user mappings\n"));