summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-09-03 11:24:36 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2012-09-03 11:24:36 -0400
commitb681a874d97a16693c59228660f8d8a75f723bf3 (patch)
tree3387972c821d9f5d99136199c824923375d68748
parent2d038749017de2d293a524b3f9df7eaae30dbf6a (diff)
Make psql's \d+ show reloptions for all relkinds.
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.
-rw-r--r--src/bin/psql/describe.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 9170dc6982a..b910c18b38b 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -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);