Postgres:检查物化视图占用的磁盘空间?

Ric*_*ard 16 postgresql database-size materialized-view disk-space

我知道如何检查 Postgres 中索引和表的大小(我使用的是 9.4 版):

SELECT
   relname AS objectname,
   relkind AS objecttype,
   reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
   FROM pg_class
   WHERE relpages >= 8
   ORDER BY relpages DESC;
Run Code Online (Sandbox Code Playgroud)

但这并没有显示物化视图。如何查看它们占用了多少磁盘空间?

Erw*_*ter 26

这是假设物化视图具有relpages >= 8in pg_class,但事实并非如此。它实际上可以是空的 - 尚未填充,由 表示pg_class.relispopulated = FALSE。在这种情况下,相应的磁盘文件的大小为零

试试吧:

SELECT relname   AS objectname
     , relkind   AS objecttype
     , reltuples AS entries
     , pg_size_pretty(pg_table_size(oid)) AS size  -- depending - see below
FROM   pg_class
WHERE  relkind IN ('r', 'i', 'm')
ORDER  BY pg_table_size(oid) DESC;
Run Code Online (Sandbox Code Playgroud)

可用的类型有

r=普通表,
i=索引,
S=序列,
v=视图,
m=物化视图,
c=复合类型,
t=TOAST表,
f=外部表

使用数据库对象大小函数之一,而不是构建自己的函数。请注意,“表的大小”可以用不同的方式定义。细节:

  • 确实是正确答案。请注意,按尺寸排序会产生误导,因为您以人类可读的形式打印尺寸,从而按字典顺序排序 (2认同)