Postgres: verificar o espaço em disco ocupado pela visualização materializada?

14

Eu sei como verificar o tamanho dos índices e tabelas no Postgres (estou usando a versão 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;

Mas isso não mostra visualizações materializadas. Como posso verificar quanto espaço em disco eles estão ocupando?

Richard
fonte

Respostas:

23

Isso supõe que visualizações materializadas têm relpages >= 8no pg_class, que não tem que ser o caso. Na verdade, ele pode estar vazio - ainda não preenchido, indicado por pg_class.relispopulated = FALSE. O arquivo de disco correspondente tem um tamanho zero nesse caso.

Tente em vez disso:

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;

Onde os tipos disponíveis são :

r= tabela comum,
i= índice,
S= sequência,
v= visualização,
m= visualização materializada,
c= tipo composto,
t= tabela TOAST,
f= tabela estrangeira

Use uma das funções de tamanho do objeto de banco de dados em vez de criar suas próprias. Esteja ciente de que o "tamanho de uma tabela" pode ser definido de diferentes maneiras. Detalhes:

Erwin Brandstetter
fonte
1
Resposta correta, de fato. Nota que a ordem por tamanho é enganador como você está imprimindo tamanho em forma fazendo ordenação legível tipo lexicographically
Jack
@ Jack: Bom ponto. Eu adicionei um mais sensato ORDER BY.
Erwin Brandstetter