From 1eec10a2de3925ef791904835e2437d1efe97139 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Fri, 19 Dec 2008 14:39:58 +0000
Subject: [PATCH] Have psql's \d+ print reloptions.  Extracted from Euler
 Taveira de Oliveira's 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 | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 53087771afd..5eb760513ec 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -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,
-- 
GitLab