I PostgreSQL är varje tabell ett objekt, med hjälp av pg_relation_size('object_name') kommer att ge storleken på objektet. Om du skickar partitionstabellen i stället för 'objektnamn', ger den bara den objektstorleken men inte storleken på underordnade tabeller.
Kolla in exemplet nedan.
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() på den överordnade tabellen ger inte den exakta storleken.
postgres=# select pg_size_pretty(pg_relation_size('parent'));
pg_size_pretty
----------------
0 bytes
(1 row)
För att uppnå partitionstabellstorlek, först känna till de berörda underordnade tabellerna och dess storlekar. Att använda pg_inherits katalogtabell hjälper till att få information om underordnade tabeller med storlekar och senare summera dem för exakt storlek. Jag har försökt skriva en liten funktion med pg_inherits för att få det gjort.
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;
Skicka nu partitionstabellen till funktionen.
postgres=# select pg_partition_table_size('parent');
pg_partition_table_size
-------------------------
16384
(1 row)
Är det inte användbart. Skriv dina kommentarer, de kommer att bli mycket uppskattade.