]> granicus.if.org Git - postgresql/commitdiff
Have \d show child tables that inherit from the specified parent
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 3 Jul 2009 18:56:50 +0000 (18:56 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 3 Jul 2009 18:56:50 +0000 (18:56 +0000)
As per discussion, \d shows only the number of child tables, because that
could be hundreds, when used for partitioning.  \d+ shows the actual list.

Author: Damien Clochard <damien@dalibo.info>

src/bin/psql/describe.c

index cde2428259dd0468465c7488c29a00451a98a67a..751af1c3792d6489e8f2e8f6679517297328b952 100644 (file)
@@ -8,7 +8,7 @@
  *
  * Copyright (c) 2000-2009, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.218 2009/06/13 13:43:34 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.219 2009/07/03 18:56:50 petere Exp $
  */
 #include "postgres_fe.h"
 
@@ -1814,6 +1814,44 @@ describeOneTableDetails(const char *schemaname,
                }
                PQclear(result);
 
+               /* print child tables */
+               printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '%s' ORDER BY c.oid::pg_catalog.regclass;", oid);
+
+               result = PSQLexec(buf.data, false);
+               if (!result)
+                       goto error_return;
+               else
+                       tuples = PQntuples(result);
+
+               if (!verbose)
+               {
+                       /* print the number of child tables, if any */
+                       if (tuples > 0)
+                       {
+                               printfPQExpBuffer(&buf, _("Number of child tables: %d (Use \\d+ to list them.)"), tuples);
+                               printTableAddFooter(&cont, buf.data);
+                       }
+               }
+               else
+               {
+                       /* display the list of child tables*/
+                       for (i = 0; i < tuples; i++)
+                       {
+                               const char *ct = _("Child tables");
+
+                               if (i == 0)
+                                       printfPQExpBuffer(&buf, "%s: %s", ct, PQgetvalue(result, i, 0));
+                               else
+                                       printfPQExpBuffer(&buf, "%*s  %s", (int) strlen(ct), "", PQgetvalue(result, i, 0));
+                               if (i < tuples - 1)
+                                       appendPQExpBuffer(&buf, ",");
+
+                               printTableAddFooter(&cont, buf.data);
+                       }
+               }
+               PQclear(result);
+
+               /* OIDs and options */
                if (verbose)
                {
                        const char *s = _("Has OIDs");