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