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: