在postgres中计算表格大小的正确方法是什么?

时间:2014-07-18 12:30:15

标签: sql postgresql

我正在开发一个项目,用于对postgres DB中的某些表进行计算,在代码的不同部分,有2种不同的计算方法:

select pg_total_relation_size ('TABLENAME');

和第二个:

select (relpages*8/1024) from pg_class where relname='TABLENAME' (Size in MB)

我知道pg_total_relation_size是我需要使用的,但我想知道这个其他计算代表什么,如果第二个也是某种大小计算,为什么我在同一个表中得到不同的结果呢? / p>

2 个答案:

答案 0 :(得分:3)

pg_total_relation_size - 是查看完整表格大小的正确方法,因为它包含索引和TOAST数据使用的磁盘空间。

当您执行第二个选择时 - 您只获得表大小(relpages是8Kb页中的表大小)。您也可以从pg_class获取TOAST和索引大小,但是您需要执行here中所述的更多sql查询,并总结您已获得的所有大小。

答案 1 :(得分:1)

您可以使用pg_size_pretty(pg_total_relation_side(oid))来打印表格大小:

select  nspname
,       relname
,       pg_size_pretty(pg_total_relation_size(c.oid)) as "size"
from    pg_class c
left join
        pg_namespace n 
on      n.oid = c.relnamespace
where   nspname not in ('pg_catalog', 'information_schema')
order by
        pg_relation_size(c.oid) desc;