2013-08-19 18 views
17

在Postgres 9.1的表格中有一列text。我想知道該列對所需磁盤空間的影響。它並不需要很精確,但我想知道該列是否對數據庫佔用的磁盤空間的20%/ 30%負責。如何估算Postgres表中一列的大小?

我知道pg_relation_size,但它只能在表級別操作。

我有很多數據庫與這個相同的模式。我傾倒了一個較小的一個,用grep剪下了這一列,然後剪切並比較了純文本轉儲的大小。但是,這不一定是活動分區中空間需求的一個很好的指標,而且對於大型數據庫來說也更難。

回答

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返回基表的大小,不包括toast表。當有人關心每列的磁盤使用情況時,很可能會涉及到一個toast表,因此您可能希望使用pg_table_size來代替。 – jjanes

+5

如果您想計算吐司表加上索引的大小,也可以使用pg_total_relation_size。 –