]> granicus.if.org Git - postgresql/commitdiff
Make psql's \d+ show reloptions for all relkinds.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 3 Sep 2012 15:24:36 +0000 (11:24 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 3 Sep 2012 15:24:36 +0000 (11:24 -0400)
Formerly it would only show them for relkinds 'r' and 'f' (plain tables
and foreign tables).  However, as of 9.2, views can also have reloptions,
namely security_barrier.  The relkind restriction seems pointless and
not at all future-proof, so just print reloptions whenever there are any.

In passing, make some cosmetic improvements to the code that pulls the
"tableinfo" fields out of the PGresult.

Noted and patched by Dean Rasheed, with adjustment for all relkinds by me.

src/bin/psql/describe.c

index 9170dc6982a51642507337de4284b9fa7bb4c39a..b910c18b38bdf89391c87e8402b988c7e79ab7dd 100644 (file)
@@ -1237,13 +1237,14 @@ describeOneTableDetails(const char *schemaname,
        tableinfo.hastriggers = strcmp(PQgetvalue(res, 0, 4), "t") == 0;
        tableinfo.hasoids = strcmp(PQgetvalue(res, 0, 5), "t") == 0;
        tableinfo.reloptions = (pset.sversion >= 80200) ?
-               strdup(PQgetvalue(res, 0, 6)) : 0;
+               strdup(PQgetvalue(res, 0, 6)) : NULL;
        tableinfo.tablespace = (pset.sversion >= 80000) ?
                atooid(PQgetvalue(res, 0, 7)) : 0;
-       tableinfo.reloftype = (pset.sversion >= 90000 && strcmp(PQgetvalue(res, 0, 8), "") != 0) ?
-               strdup(PQgetvalue(res, 0, 8)) : 0;
-       tableinfo.relpersistence = (pset.sversion >= 90100 && strcmp(PQgetvalue(res, 0, 9), "") != 0) ?
-               PQgetvalue(res, 0, 9)[0] : 0;
+       tableinfo.reloftype = (pset.sversion >= 90000 &&
+                                                  strcmp(PQgetvalue(res, 0, 8), "") != 0) ?
+               strdup(PQgetvalue(res, 0, 8)) : NULL;
+       tableinfo.relpersistence = (pset.sversion >= 90100) ?
+               *(PQgetvalue(res, 0, 9)) : 0;
        PQclear(res);
        res = NULL;
 
@@ -2224,7 +2225,7 @@ describeOneTableDetails(const char *schemaname,
                        printTableAddFooter(&cont, buf.data);
                }
 
-               /* OIDs and options */
+               /* OIDs, if verbose */
                if (verbose)
                {
                        const char *s = _("Has OIDs");
@@ -2232,25 +2233,23 @@ describeOneTableDetails(const char *schemaname,
                        printfPQExpBuffer(&buf, "%s: %s", s,
                                                          (tableinfo.hasoids ? _("yes") : _("no")));
                        printTableAddFooter(&cont, buf.data);
-
-                       /* print reloptions */
-                       if (pset.sversion >= 80200)
-                       {
-                               if (tableinfo.reloptions && tableinfo.reloptions[0] != '\0')
-                               {
-                                       const char *t = _("Options");
-
-                                       printfPQExpBuffer(&buf, "%s: %s", t,
-                                                                         tableinfo.reloptions);
-                                       printTableAddFooter(&cont, buf.data);
-                               }
-                       }
                }
 
+               /* Tablespace info */
                add_tablespace_footer(&cont, tableinfo.relkind, tableinfo.tablespace,
                                                          true);
        }
 
+       /* reloptions, if verbose */
+       if (verbose &&
+               tableinfo.reloptions && tableinfo.reloptions[0] != '\0')
+       {
+               const char *t = _("Options");
+
+               printfPQExpBuffer(&buf, "%s: %s", t, tableinfo.reloptions);
+               printTableAddFooter(&cont, buf.data);
+       }
+
        printTable(&cont, pset.queryFout, pset.logfile);
        printTableCleanup(&cont);