summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2009-07-03 18:56:50 +0000
committerPeter Eisentraut2009-07-03 18:56:50 +0000
commitc5eb296c534c37f990f1b8ba769983acf7c974a2 (patch)
tree1fad293333f88a35837bf07c11304385c72982fb
parent2ce152a0a63a4d31d9ecefe84daf35a4108cac2c (diff)
Have \d show child tables that inherit from the specified parent
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 <[email protected]>
-rw-r--r--src/bin/psql/describe.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 65d22f2b15..af803d75e5 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -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");