]> granicus.if.org Git - postgresql/commitdiff
Have psql's \d+ print reloptions. Extracted from Euler Taveira de Oliveira's
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 19 Dec 2008 14:39:58 +0000 (14:39 +0000)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 19 Dec 2008 14:39:58 +0000 (14:39 +0000)
reloptions patch for autovacuum and revised by me.

Note that there doesn't seem to be a way to display an index's reloptions.

src/bin/psql/describe.c

index 53087771afde4d4cad8e3bafe648ad2dc755522c..5eb760513eccdfc5c0193396fa71b61b47715009 100644 (file)
@@ -8,7 +8,7 @@
  *
  * Copyright (c) 2000-2008, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.188 2008/11/09 21:24:33 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.189 2008/12/19 14:39:58 alvherre Exp $
  */
 #include "postgres_fe.h"
 
@@ -846,6 +846,7 @@ describeOneTableDetails(const char *schemaname,
                bool            hastriggers;
                bool            hasoids;
                Oid                     tablespace;
+               char       *reloptions;
        }                       tableinfo;
        bool            show_modifiers = false;
        bool            retval;
@@ -862,9 +863,12 @@ describeOneTableDetails(const char *schemaname,
        /* Get general table info */
        printfPQExpBuffer(&buf,
           "SELECT relchecks, relkind, relhasindex, relhasrules, %s, "
-                                         "relhasoids%s\n"
+                                         "relhasoids"
+                                        "%s%s\n"
                                          "FROM pg_catalog.pg_class WHERE oid = '%s'",
                                          (pset.sversion >= 80400 ? "relhastriggers" : "reltriggers <> 0"),
+                                         (pset.sversion >= 80200 && verbose ?
+                                          ", pg_catalog.array_to_string(reloptions, E', ')" : ",''"),
                                          (pset.sversion >= 80000 ? ", reltablespace" : ""),
                                          oid);
        res = PSQLexec(buf.data, false);
@@ -886,8 +890,10 @@ describeOneTableDetails(const char *schemaname,
        tableinfo.hasrules = strcmp(PQgetvalue(res, 0, 3), "t") == 0;
        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;
        tableinfo.tablespace = (pset.sversion >= 80000) ?
-                                                               atooid(PQgetvalue(res, 0, 6)) : 0;
+                                                               atooid(PQgetvalue(res, 0, 7)) : 0;
        PQclear(res);
        res = NULL;
        
@@ -1586,6 +1592,19 @@ 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);
+                               }
+                       }
                }
 
                add_tablespace_footer(&cont, tableinfo.relkind, tableinfo.tablespace,