エンジニア的な技術的なブログ

webエンジニアの開発の知見を書きます。PHP、javascript、postgres、mysql、あと多少のインフラ周りとか。

postgresのDB容量、テーブルごとの容量を調べるとき

運用中のDBの容量を知りたいとき、あると思います。
そんな方法

DBごとでも、テーブルごとでも流れは同じ

調べたい対象のidを調べる → そのidからデータ量を調べる


です。

ポスグレには、pg_stag_database という統計情報のテーブルがあるようなんで、
それを使います。

select datid,datname from pg_stat_database;

全DBのdatidというidが取得できるんで、必要なDBのdatidを別ファイルにでも移しておいて

du -sh /Library/PostgreSQL/9.2/data/base/[datid]


これで取得できますー
※パスは各自、環境に合わせてね!

テーブルごとには

select relfilenode,relname from pg_class order by relname;

スキーマごとに取得する方法はわかりませんでした--;

そして取得したrelfilenode のカラムの値で

du -sh /Library/PostgreSQL/9.2/data/base/[datid]/[relfilenode]


これで取得できますー

こんな感じです。