確認方法
上の議論を踏まえ、以下のクエリを発行する。SELECT relname, reltuples, (relpages / 128) as mbytes, (relpages * 8192.0 / (reltuples + 1e-10)) as average_row_size FROM pg_class ORDER BY mbytes DESC;こうすると、以下のようにテーブル名、行数、占有サイズ(Mbyte)、平均サイズ(byte)を占有サイズが大きい順に知ることができる。
PostgreSQLで各テーブルの総サイズと平均サイズを知る - Qiita 2015
テーブルのサイズ(ディスクの消費量)を調べる方法を紹介します(PostgreSQL 8.4)。
まず、PostgreSQLのブロックサイズ(ページサイズ)を確認します。testdb=# SHOW block_size; block_size ------------ 8192このように、デフォルトは8192バイト(8KByte)です。
次に、テーブル名(relname)を指定して、テーブルが消費しているページ数を調べます。testdb=# SELECT relname,relfilenode,relpages from pg_class where relname='testtable'; relname | relfilenode | relpages -------------+-------------+---------- testtable | 18226 | 3438293 (1 row)relpagesの値が、テーブルが消費しているページ数です。ページ数とブロックサイズをかけた値が、テーブルのサイズになります。今回の場合だと、 (8KB * 3438293) = 27506344KB (約26GB)のディスクを消費している計算になります。
インデックスのサイズも同様に確認できます。testdb=# SELECT relname,relfilenode,relpages from pg_class where relname='idx_test'; relname | relfilenode | relpages -----------+-------------+---------- idx_test | 19203 | 1192947 (1 row)この場合、 (8KB * 1192947) = 9543576KB (約9GB)のディスクを消費している計算になります。