我正在开发一个项目,用于对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>
答案 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;