--- describe.c	2023-06-08 08:31:12.594000000 +0000
+++ describe_change.c	2023-06-08 08:33:54.807000000 +0000
@@ -3370,33 +3370,97 @@
 		/* print child tables (with additional info if partitions) */
 		if (pset.sversion >= 140000)
 			printfPQExpBuffer(&buf,
-							  "SELECT c.oid::pg_catalog.regclass, c.relkind,"
-							  " inhdetachpending,"
-							  " pg_catalog.pg_get_expr(c.relpartbound, c.oid)\n"
-							  "FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
-							  "WHERE c.oid = i.inhrelid AND i.inhparent = '%s'\n"
-							  "ORDER BY pg_catalog.pg_get_expr(c.relpartbound, c.oid) = 'DEFAULT',"
-							  " c.oid::pg_catalog.regclass::pg_catalog.text;",
-							  oid);
-		else if (pset.sversion >= 100000)
+                                          "WITH RECURSIVE partition_tree AS ( "
+                                          "  SELECT c.oid::pg_catalog.regclass AS object_name, "
+                                          "         c.oid,"
+                                          "         0 AS level,"
+                                          "         c.relkind,"
+                                          "         i.inhdetachpending,"
+                                          "         pg_get_expr(c.relpartbound, c.oid) AS relpartbound,"
+                                          "         array[c.relname::text] AS path \n"
+                                          "  FROM pg_catalog.pg_class c \n"
+                                          "  JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid \n"
+                                          "  WHERE i.inhparent ='%s' \n"
+                                          "  UNION ALL \n"
+                                          "  SELECT c.oid::pg_catalog.regclass AS object_name,"
+                                          "         c.oid,"
+                                          "         pt.level + 1 AS level,"
+                                          "         c.relkind,"
+                                          "         i.inhdetachpending,"
+                                          "         pg_get_expr(c.relpartbound, c.oid) AS relpartbound,"
+                                          "         pt.path || c.relname::text \n"
+                                          "  FROM pg_catalog.pg_class c \n"
+                                          "  JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid \n"
+                                          "  JOIN partition_tree pt ON i.inhparent = pt.oid )\n"
+                                          " SELECT REPEAT(E'\t', level) || object_name AS oid,"
+                                          "       relkind,"
+                                          "       inhdetachpending,"
+                                          "       relpartbound as pg_get_expr \n"
+                                          "FROM partition_tree t \n"
+                                          "ORDER BY path, array_to_string(t.path || array[t.object_name::text], '.'), t.object_name, relpartbound = 'DEFAULT';",
+                                          oid);
+        else if (pset.sversion >= 100000)
 			printfPQExpBuffer(&buf,
-							  "SELECT c.oid::pg_catalog.regclass, c.relkind,"
-							  " false AS inhdetachpending,"
-							  " pg_catalog.pg_get_expr(c.relpartbound, c.oid)\n"
-							  "FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
-							  "WHERE c.oid = i.inhrelid AND i.inhparent = '%s'\n"
-							  "ORDER BY pg_catalog.pg_get_expr(c.relpartbound, c.oid) = 'DEFAULT',"
-							  " c.oid::pg_catalog.regclass::pg_catalog.text;",
-							  oid);
+                                          "WITH RECURSIVE partition_tree AS (\n"
+                                          "  SELECT c.oid::pg_catalog.regclass AS partition_name,"
+                                          "         c.oid,"
+                                          "         0 AS level,"
+                                          "        c.relkind,"
+                                          "         false AS i.inhdetachpending,"
+                                          "         pg_catalog.pg_get_expr(c.relpartbound, c.oid) AS relpartbound"
+                                          "         array[c.relname::text] AS path \n"
+                                          "  FROM pg_catalog.pg_class c "
+                                          "  JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid\n"
+                                          "  WHERE i.inhparent = '%s'\n"
+                                          "  UNION ALL"
+                                          "  SELECT c.oid::pg_catalog.regclass AS partition_name,"
+                                          "         c.oid,"
+                                          "         pt.level + 1 AS level,"
+                                          "         c.relkind,"
+                                          "         false AS i.inhdetachpending,"
+                                          "         pg_catalog.pg_get_expr(c.relpartbound, c.oid) AS relpartbound"
+                                          "         pt.path || c.relname::text\n"
+                                          "  FROM pg_catalog.pg_class c"
+                                          "  JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid"
+                                          "  JOIN partition_tree pt ON i.inhparent = pt.oid"
+                                          ")\n"
+                                          "SELECT REPEAT(' ', level * 4) || partition_name AS oid,"
+                                          " relkind,"
+                                          " inhdetachpending,"
+                                          " relpartbound as pg_get_expr\n"
+                                          "FROM partition_tree\n"
+                                          "ORDER BY partition_name::pg_catalog.text, level, relpartbound = 'DEFAULT';",
+                                          oid);
 		else
 			printfPQExpBuffer(&buf,
-							  "SELECT c.oid::pg_catalog.regclass, c.relkind,"
-							  " false AS inhdetachpending, NULL\n"
-							  "FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n"
-							  "WHERE c.oid = i.inhrelid AND i.inhparent = '%s'\n"
-							  "ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text;",
-							  oid);
-
+                                          "WITH RECURSIVE partition_tree AS (\n"
+                                          "  SELECT c.oid::pg_catalog.regclass AS partition_name,"
+                                          "         c.oid,"
+                                          "         0 AS level,"
+                                          "         c.relkind,"
+                                          "         false AS i.inhdetachpending,"
+                                          "         array[c.relname::text] AS path \n"
+                                          "  FROM pg_catalog.pg_class c "
+                                          "  JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid\n"
+                                          "  WHERE i.inhparent = '%s'\n"
+                                          "  UNION ALL"
+                                          "  SELECT c.oid::pg_catalog.regclass AS partition_name,"
+                                          "         c.oid,"
+                                          "         pt.level + 1 AS level,"
+                                          "         c.relkind,"
+                                          "         false AS i.inhdetachpending,"
+                                          "         pt.path || c.relname::text\n"
+                                          "  FROM pg_catalog.pg_class c"
+                                          "  JOIN pg_catalog.pg_inherits i ON c.oid = i.inhrelid"
+                                          "  JOIN partition_tree pt ON i.inhparent = pt.oid"
+                                          ")\n"
+                                          "SELECT REPEAT(' ', level * 4) || partition_name AS oid,"
+                                          " relkind,"
+                                          " inhdetachpending,"
+                                          " NULL\n"
+                                          "FROM partition_tree\n"
+                                          "ORDER BY partition_name::pg_catalog.text, level, relpartbound = 'DEFAULT';",
+                                          oid);
 		result = PSQLexec(buf.data);
 		if (!result)
 			goto error_return;
@@ -3443,9 +3507,6 @@
 									  ctw, "", PQgetvalue(result, i, 0));
 				if (!PQgetisnull(result, i, 3))
 					appendPQExpBuffer(&buf, " %s", PQgetvalue(result, i, 3));
-				if (child_relkind == RELKIND_PARTITIONED_TABLE ||
-					child_relkind == RELKIND_PARTITIONED_INDEX)
-					appendPQExpBufferStr(&buf, ", PARTITIONED");
 				if (strcmp(PQgetvalue(result, i, 2), "t") == 0)
 					appendPQExpBufferStr(&buf, " (DETACH PENDING)");
 				if (i < tuples - 1)
