PostgreSQLでは、すべてのテーブルがオブジェクトであり、pg_relation_size(‘object_name’)を使用するとオブジェクトのサイズがわかります。 「object_name」の代わりにパーティションテーブルを送信すると、そのオブジェクトサイズのみが表示され、子テーブルのサイズは表示されません。
以下の例を確認してください。
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()は、正確なサイズを示しません。
postgres=# select pg_size_pretty(pg_relation_size('parent'));
pg_size_pretty
----------------
0 bytes
(1 row)
パーティションテーブルのサイズを実現するには、まず、関係する子テーブルとそのサイズを確認します。 pg_inheritsカタログテーブルを使用すると、サイズのある子テーブルの情報を取得し、後でそれらを合計して正確なサイズにするのに役立ちます。 pg_inheritsを使用して小さな関数を作成してみました。
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;
次に、パーティションテーブルを関数に送信します。
postgres=# select pg_partition_table_size('parent');
pg_partition_table_size
-------------------------
16384
(1 row)
役に立たないですか。コメントを投稿してください。コメントをいただければ幸いです。