[PostgreSQL] 現在のテーブルとインデックスのサイズ一覧を知る方法


CREATE VIEW report_tablesize AS

SELECT
  objname,
  to_char(pg_relation_size(objname::regclass), '999,999,999,999') as bytes
FROM (
  SELECT
    tablename as objname
  FROM pg_tables
  WHERE schemaname = 'public'

  UNION

  SELECT
    indexname as objname
  FROM pg_indexes
  WHERE schemaname = 'public'
  ) as objects

ORDER BY bytes DESC


;

COMMENT ON VIEW report_tablesize IS '現在のテーブルサイズ';

下記記事のSQLが動かなくなったので調べたところ、 PostgreSQL 8.4からpg_relation_size関数の挙動が変わって、regclass型しか受け付けなくなったのが原因のようです。
参考
PostgreSQLでテーブルサイズを確認する
カテゴリ: