sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL9.0のパーティションテーブルのサイズ

    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)

    役に立たないですか。コメントを投稿してください。コメントをいただければ幸いです。


    1. 正規表現でリストからn番目の値を選択し、nullを許可します

    2. 別のテーブルの列が更新されたときに、あるテーブルの列を更新するトリガーを作成します

    3. ヘアサロンデータベースプロジェクト

    4. SQLでDISTINCTを使用する方法