On Fri, Mar 25, 2022 at 08:52:40PM +0800, Japin Li wrote: > When I try to get total size of partition tables though partitioned table > name using pg_relation_size(), it always returns zero. I can use the > following SQL to get total size of partition tables, however, it is a bit > complex.
This doesn't handle multiple levels of partitioning, as \dP+ already does. Any new function should probably be usable by \dP+ (although it would also need to support older server versions for another ~10 years). > SELECT pg_size_pretty(sum(pg_relation_size(i.inhrelid))) > FROM pg_class c JOIN pg_inherits i ON c.oid = i.inhparent > WHERE relname = 'parent'; > Could we provide a function to get the total size of the partition table > though the partitioned table name? Maybe we can extend > the pg_relation_size() to get the total size of partition tables through > the partitioned table name. Sometimes people would want the size of the table itself and not the size of its partitions, so it's not good to change pg_relation_size(). OTOH, pg_total_relation_size() shows a table size including toast and indexes. Toast are an implementation detail, which is intended to be hidden from application developers. And that's a goal for partitioning, too. So maybe it would make sense if it showed the size of the table, toast, indexes, *and* partitions (but not legacy inheritance children). I know I'm not the only one who can't keep track of what all the existing pg_*_size functions include, so adding more functions will also add some additional confusion, unless, perhaps, it took arguments indicating what to include, like pg_total_relation_size(partitions=>false, toast=>true, indexes=>true, fork=>main). -- Justin