PostgreSQL テーブルサイズを調べる方法

確認方法
上の議論を踏まえ、以下のクエリを発行する。

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)のディスクを消費している計算になります。

[PostgreSQL] テーブルサイズを調べる方法 2012