テーブルのレコード数ではなくデータサイズを知りたいなと思う時があるかと思います。
PostgreSQLには pg_relation_size や pg_total_relation_size といったテーブルのデータサイズを返す関数があります。
前者(pg_relation_size)はテーブルのデータサイズを返し、後者(pg_total_relation_size)はデータに加えインデックスも含めたサイズを返します。
テーブルのデータサイズを求める
データサイズを求めるにはpg_relation_size関数を使います。
テーブル users のデータサイズを求めるには以下のSQLを実行します
select pg_total_size ('users')) AS "data_size";
実行結果
サイズの単位はbyteです。
サイズ表記をわかりやすくするには pg_size_pretty 関数を使います
select pg_size_pretty(pg_total_size ('users'))) AS "data_size";
実行結果
インデックスを含めたテーブルのデータサイズを求める
インデックスを含めたテーブルのデータサイズを求めるにはpg_total_relation_size関数を使います。
テーブル users のデータサイズを求めるには以下のSQLを実行します
select pg_size_pretty(pg_total_relation_size ('m_banks')) AS "total_size";
実行結果
データベース上のすべてのテーブルのデータサイズを求める
参考: How to Get Sizes of Database Objects in PostgreSQL
データベース上の全テーブルのデータサイズを求めるには以下のSQLを実行します
※サイズの大きい順に表示します
select N.nspname as "schema", C.relname AS "table", pg_size_pretty(pg_relation_size (C.oid)) AS "data_size", pg_size_pretty(pg_total_relation_size (C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ( 'pg_catalog', 'information_schema' ) AND C .relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size (C.oid) DESC;
実行結果