2013-08-19 11 views
17

Postgres 9.1のテーブルには、タイプtextのカラムがあります。私は必要なディスクスペースにその列だけの影響を知りたいと思います。正確である必要はありませんが、その列がデータベースによって消費されるディスク容量の20%/ 30%/ ...を担当しているかどうかを知りたいと思います。Postgresテーブルの1列のサイズを見積もる方法は?

私はpg_relation_sizeを知っていますが、テーブルレベルでのみ動作します。

私はこの同じスキーマを持つ多くのデータベースを持っています。私は小さいものを投げ捨て、grepで切り出して切り取り、プレーンテキストダンプのサイズを比較しました。しかし、これは必ずしもライブDBのスペース要件の良い指標ではなく、大規模なデータベースではそれを行うこともより困難です。

答えて

31
select 
    sum(pg_column_size(the_text_column)) as total_size, 
    avg(pg_column_size(the_text_column)) as average_size, 
    sum(pg_column_size(the_text_column)) * 100.0/pg_relation_size('t') as percentage 
from t; 
+7

pg_relation_sizeは、トーストテーブルを含めずにベーステーブルのサイズを返します。誰かが各列のディスク使用を気にすると、トーストテーブルが関与している可能性が高いので、代わりにpg_table_sizeを使用することをお勧めします。 – jjanes

+5

トーストテーブルとインデックスのサイズを加算する場合は、pg_total_relation_sizeを使用することもできます。 –