Como posso listar todas as tabelas de um banco de dados PostgreSQL e ordená-las por tamanho ?
sql
postgresql
postgresql-9.3
nada-especial aqui
fonte
fonte
\d+
mostrará essas informações, embora não classificadas.Respostas:
Isso mostra o tamanho de todas as tabelas no esquema,
public
se você tiver vários esquemas, convém usar:Exemplo de SQLFiddle: http://sqlfiddle.com/#!15/13157/3
Lista de todas as funções de tamanho de objeto no manual .
fonte
select table_schema, table_name, pg_relation_size(table_schema||'.'||table_name) from information_schema.tables order by 3;
obrigado pela ajuda!select * from information_schema.tables where table_schema = 'public';
produz zero linhas, embora\dn
mostre o esquema público. Talvez uma mudança em 9,5 tenha causado isso?Isso mostrará o nome do esquema, nome da tabela, tamanho bonito e tamanho (necessário para classificação).
Eu construo isso com base nas soluções aqui, lista de esquemas com tamanhos (relativos e absolutos) em um banco de dados PostgreSQL
fonte
Isso ficará mais claro.
pg_size_pretty(<numeric_value>)
- converte no.of bytes em formato legível por humanos.pg_database_size(<db_name>)
- obtém o tamanho do banco de dados em bytes .pg_total_relation_size(<relation_name>)
- obtém o tamanho total da tabela e seu índice em bytes .pg_relation_size(<relation_name>)
- obtém o tamanho da relação (tabela / índice) em bytes .pg_index_size(<relation_name>)
- obtém o tamanho do índice da relação em bytes .current_database()
- obtém o banco de dados usado atualmente no qual esta consulta está sendo executada.Inquerir:
Resultado:
O formato humanizado é representar em
bytes
,kB
,MB
,GB
, eTB
.bytes
parakB
- começa de10240 bytes
bytes
paraMB
- começa de10485248 bytes
=10239.5 kB
~10 MB
bytes
paraGB
- começa de10736893952 bytes
=10239.5 MB
~10 BG
bytes
paraTB
- começa de10994579406848 bytes
=10239.5 GB
~10 TB
Todas as conversões de unidades começam em
10 + <unit>
.Para referência - Documentação oficial do Postgres
fonte
retirado daqui https://wiki-bsse.ethz.ch/display/ITDOC/Check+size+of+tables+and+objects+in+PostgreSQL+database
fonte
Outra alternativa
fonte
Eu precisava descobrir quais tabelas ocupam mais espaço.
Com base em outras respostas, usei esta consulta:
Eu obtenho o seguinte resultado:
Eu deveria ter comprado um SSD maior.
fonte
fonte