W PostgreSQL każda tabela jest obiektem, użycie pg_relation_size(‘nazwa_obiektu’) da rozmiar obiektu. Jeśli wyślesz tabelę partycji w miejsce „nazwa_obiektu”, daje to tylko ten rozmiar obiektu, ale nie rozmiary tabel podrzędnych.
Sprawdź przykład podany poniżej.
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() w tabeli nadrzędnej nie poda dokładnego rozmiaru.
postgres=# select pg_size_pretty(pg_relation_size('parent'));
pg_size_pretty
----------------
0 bytes
(1 row)
Aby osiągnąć rozmiar tabeli partycji, najpierw poznaj odpowiednie tabele podrzędne i ich rozmiary. Użycie tabeli katalogu pg_inherits pomoże w uzyskaniu informacji o tabelach podrzędnych z rozmiarami, a następnie zsumowaniu ich dla dokładnego rozmiaru. Próbowałem napisać małą funkcję za pomocą pg_inherits, aby to zrobić.
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;
Teraz wyślij tabelę partycji do funkcji.
postgres=# select pg_partition_table_size('parent');
pg_partition_table_size
-------------------------
16384
(1 row)
Czy to nie jest przydatne. Opublikuj swoje komentarze, będą one bardzo mile widziane.