PostgreSQLでテーブルサイズを確認する

ちょくちょく使うけど毎回考えるのが面倒になったのでコピペ用メモ。

SELECT
  relname,
  relkind,
  to_char(reltuples, '999,999,999') as rows,
  to_char(pg_relation_size(relname), '999,999,999,999') as bytes
FROM pg_class
WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname='public');


↓こんな感じの出力が出来る。

      relname       | relkind |     rows     |      bytes       
                                                                                                                              • -
usertrack | r | 217,425 | 18,202,624 url | r | 26,589 | 4,767,744 url_id_seq | S | 1 | 8,192 usertrack_uid | i | 217,425 | 8,044,544 usertrack_accessed | i | 217,425 | 5,103,616 url_pkey | i | 26,589 | 614,400 url_url_index | i | 26,589 | 2,785,280 (7 rows)

relkindは見れば分かるだろうけど、r=テーブル、Sシーケンス、i=インデックス、v=ビューね。
VACUUM ANALYZE とか REINDEX とかしてから実行した方がより正確な値が取れるので忘れないで。(長期放置してたDBとかだと数倍レベルの誤差が出るときもある)