Nada como a necessidade para obrigar a fazermos coisas interessantes, não acham? Pois é, estava precisando levantar as maiores tabelas num PostgreSQL 8.3. Uma pesquisa rápida pela internet e não encontro nada que atenda a minha necessidade, por acaso o pgadmin3 estava aberto e vi que ele (pgadmin3) traz várias informações de uma tabela. Ainda não era o que queria, precisava listar todas e uma observada na tabela pgclass + uma função chamada pg_pretty_size conseguiria atender minha necessidade.
Como?
pmanson:~# psql -U postgres -c "SELECT relname, pg_size_pretty(relpages*8192) as "tamanho" from pg_class order by relpages DESC limit 10;" base_exemplo
relname | tamanho
—————————+———
estatistica | 271 MB
subacaoindicador | 194 MB
idx_estsessionusucpfsisid | 192 MB
estatistica_pkey | 101 MB
idx_usucpfestdata | 101 MB
idx_sisidestdata | 78 MB
idx_usucpf | 78 MB
idx_estatistica_mnuid | 56 MB
idx_estdata | 56 MB
idx_sisid | 56 MB
(10 registros)






on Mar 24th, 2008 at 16:58
Se alguma tabela tiver mais que 2 Gb vai dar erro.
Coloque um ::bigint no relpages, ficando assim:
SELECT relname, pg_size_pretty(relpages::bigint*8192) as “tamanho” from pg_class order by relpages DESC limit 10;
on Mar 24th, 2008 at 17:39
Opa,
Valeu pela dica.
on Mar 27th, 2008 at 09:38
Muito legal, valeu pela dica Ike.
on Mar 28th, 2008 at 18:41
E se o tamanho do bloco não for 8kb? Pegue das settings locais o tamanho do bloco do cluster corrente.
on Mar 29th, 2008 at 01:45
Brombatti, não sei dizer. Mas sua dica é valida e só completa as informações de quem irá pesquisar. Valeu.