Isso supõe que visualizações materializadas têm relpages >= 8
no 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: