Caros, hoje pretendo ser o mais breve possível apresentando uma dica rápida, eu precisava ver o tamanho das tabelas no psql, essa funcionalidade não existia, até agora…
Pois bem, apesar de existirem algumas ferramentas gráficas como o Aqua Studio, DbVisualizer e o próprio pgAdminIII, o meu fiel companheiro de todos os dias acaba sendo o bom e velho psql. Leve, simples e bastante completo ele me proporciona agilidade em muitas das minhas tarefas diárias.
Nessas últimas versões ele vem recebendo algumas características novas. Uma delas que podemos esperar para a versão 8.4, por exemplo, é uma melhoria do comando “\l+” que, nessa versão, mostra também os tamanhos que os bancos de dados ocupam:
analise=# \l+
List of databases
Name | Owner | Encoding | Access Privileges | Size | Tablespace | Description
-----------+-----------+----------+----------------------------------------------------------+---------+------------+---------------------------
analise | postgres | UTF8 | {sademo=CTc/postgres,postgres=CTc/postgres,=Tc/postgres} | 151 MB | pg_default |
bench | postgres | UTF8 | | 710 MB | pg_default |
postgres | postgres | UTF8 | | 4215 kB | pg_default |
livraria | sasebo | UTF8 | | 4136 kB | pg_default |
template0 | postgres | UTF8 | {=c/postgres,postgres=CTc/postgres} | 4136 kB | pg_default |
template1 | postgres | UTF8 | {postgres=CTc/postgres,=c/postgres} | 4136 kB | pg_default | default template database
No entanto, para o comando “\d+”, não foi implementada a mesma idéia, ou seja, ele não lista o tamanho dos objetos (visões, tabelas, sequências, indices) e por isso eu acabei criando o patch abaixo que, uma vez aplicado na versão última versão do PostgreSQL no CVS, habilita essa característica no psql:
Nota! Eu submetio patch para a pgsql-hackers e ele foi aceito e comitado, então na versão 8.4 ele já estará disponível…
Index: describe.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/psql/describe.c,v
retrieving revision 1.166
diff -c -r1.166 describe.c
*** describe.c 30 Mar 2008 18:10:20 -0000 1.166
--- describe.c 11 Apr 2008 04:59:56 -0000
***************
*** 1766,1775 ****
--- 1766,1781 ----
gettext_noop("Table"));
if (verbose)
+ {
appendPQExpBuffer(&buf,
",\n pg_catalog.obj_description(c.oid, 'pg_class') as \"%s\"",
gettext_noop("Description"));
+ appendPQExpBuffer(&buf,
+ ",\n pg_catalog.pg_size_pretty(pg_catalog.pg_relation_size(c.oid)) as \"%s\"",
+ gettext_noop("Size"));
+ }
+
appendPQExpBuffer(&buf,
"\nFROM pg_catalog.pg_class c"
"\n JOIN pg_catalog.pg_roles r ON r.oid = c.relowner"
***************
*** 1809,1816 ****
processSQLNamePattern(pset.db, &buf, pattern, true, false,
"n.nspname", "c.relname", NULL,
"pg_catalog.pg_table_is_visible(c.oid)");
!
! appendPQExpBuffer(&buf, "ORDER BY 1,2;");
res = PSQLexec(buf.data, false);
termPQExpBuffer(&buf);
--- 1815,1825 ----
processSQLNamePattern(pset.db, &buf, pattern, true, false,
"n.nspname", "c.relname", NULL,
"pg_catalog.pg_table_is_visible(c.oid)");
!
! if (verbose)
! appendPQExpBuffer(&buf, "ORDER BY 1, pg_catalog.pg_relation_size(c.oid) DESC, 2;");
! else
! appendPQExpBuffer(&buf, "ORDER BY 1,2;");
res = PSQLexec(buf.data, false);
termPQExpBuffer(&buf);
O que eu faço é mostrar uma coluna a mais (“Size”), e ordenar a saída por Esquema, Tamanho (decrescente) e Nome do objeto. A saída fica algo assim:
analise=# \d+
List of relations
Schema | Name | Type | Owner | Description | Size
---------+------------------------------------+-------+--------------+-------------+------------
teste | tb_cliente | table | sa_analiseq | Cliente | 8192 bytes
teste | tb_compra | table | sa_analise | Compra | 8192 bytes
teste | tb_item_compra | table | sa_analise | ItemCompra | 8192 bytes
teste | tb_produto | table | sa_analise | Produto | 8192 bytes
financ | tb_caixa | table | sa_analise | Caixa | 517 MB
financ | tb_banco | table | sa_analise | Banco | 80 MB
generic | tb_cliente | table | sa_analise | Cliente | 250 MB
generic | tb_pessoa | table | sa_analise | Pessoa | 140 MB
Bom, é isso! “:D