Check out the example given below.
postgres=# \dt+ List of relations Schema | Name | Type | Owner | Size | Description --------+---------------+-------+----------+------------+------------- public | child1 | table | postgres | 8192 bytes | public | child2 | table | postgres | 8192 bytes | public | parent | table | postgres | 0 bytes | (3 rows)
pg_relation_size() on parent table will not give the exact size.
postgres=# select pg_size_pretty(pg_relation_size('parent')); pg_size_pretty ---------------- 0 bytes (1 row)
To achieve partition table size, firstly know the concerned child tables and its sizes. Using pg_inherits catalog table will help in getting the information of child tables with sizes and later sum them for exact size. I have tried writing a small function using pg_inherits to get it done.
CREATE OR REPLACE FUNCTION pg_partition_table_size(text) returns numeric as $$ select sum(to_number(pg_size_pretty(pg_relation_size(inhrelid::regclass)),'999999999')) from pg_inherits where inhparent=$1::regclass; $$ language sql;
Now, send the partition table to the function.
postgres=# select pg_partition_table_size('parent'); pg_partition_table_size ------------------------- 16384 (1 row)
Is it not useful. Do post your comments, they will be greatly appreciated.
--Raghav
4 comments :
Good stuff, thanks
Very nice indeed, but how do we know whether the returned value is KB, MB, GB, ??? The to_number conversion lops off the factor from pg_size_pretty. I've tried to preserve it, but cannot.
CREATE OR REPLACE FUNCTION pg_partition_table_size(text) returns text as
$$
select pg_size_pretty(sum(pg_relation_size(inhrelid))::bigint) from pg_inherits where inhparent=$1::regclass;
$$ language sql;
Bit modified version of the same, which actually shows unit GB/MB/KB...
This doesn't consider parent table size right? In case some records are there in parent table ! So slightly changed as following
CREATE OR REPLACE FUNCTION pg_partition_table_size(text) returns text as
$$
select pg_size_pretty(sum(pg_relation_size(inhrelid))::bigint + pg_relation_size($1)) from pg_inherits where inhparent=$1::regclass;
$$ language sql;
Post a Comment