Beleza Rodrigo!
Solução bem elegante.
Depois de conseguir ver todos do banco atual eu tentei de todos os bancos.
Acabei conseguindo unindo ao PHP.
Como eu faria isso somente com o catálogo?
Vendo a soma de todos os registros de todas as tabelas e todos os bancos:
<?php
$conexao=pg_connect("host=127.0.0.1 user=postgres password=postabir");
$sql="SELECT datname AS banco FROM pg_database ORDER BY datname";
$consulta=pg_query($conexao,$sql);
$banco = array();
$c=0;
while ($data = @pg_fetch_object($consulta,$c)) {
$cons=$data->banco;
$banco[] .= $cons;
$c++;
}
$sql2="SELECT n.nspname as esquema,c.relname as tabela FROM
pg_namespace n, pg_class c
WHERE n.oid = c.relnamespace
and c.relkind = 'r' -- no indices
and n.nspname not like 'pg\\_%' -- no catalogs
and n.nspname != 'information_schema' -- no information_schema
ORDER BY nspname, relname";
for ($x=0; $x < count($banco);$x++){
if ($banco[$x] !="template0" && $banco[$x] != "template1" &&
$banco[$x] !="postgres"){
$conexao2=pg_connect("host=127.0.0.1 dbname=$banco[$x]
user=postgres
password=postabir");
$consulta2=pg_query( $conexao2, $sql2 );
while ($data = pg_fetch_object($consulta2)) {
$esquematab=$data->esquema.'.'.$data->tabela;
$sql3="SELECT count(*) FROM $esquematab";
$consulta3=pg_query($conexao2,$sql3);
[EMAIL PROTECTED]($consulta3);
print 'Banco.Esquema.Tabela ->
'.$banco[$x].'.'.$data->esquema.'.'.$data->tabela.' - Registro(s) -
'.$res[0].'<br>';
$total += $res[0];
}
}
}
print "Total de Registro de todas as tabelas de todos os bancos ".
$total;
?>
2006/9/20, Rodrigo Hjort <[EMAIL PROTECTED]>:
> Hmm.. Uma solução um tanto ardilosa, não?
> O count(*) é extremamente custoso.
>
> Sugestão:
>
> 1) rodar o ANALYZE FULL (em todo o banco)
>
> 2) utilizar o campo "reltuples", ex:
>
> SELECT sum(reltuples) as qtd_linhas
> FROM pg_class
> WHERE relkind = 'r';
>
> 3) criar uma view com a instrução SQL
>
> 4) executar em qualquer ambiente/plataforma/ferramenta
>
> --
> Rodrigo Hjort
> http://icewall.org/~hjort
>
>
> 2006/9/19, Ribamar Sousa <[EMAIL PROTECTED]>:
> > Olá!
> >
> > Aqui onde trabalho praticamente temos um único banco, contendo
> > diversos esquemas.
> > Acabei por conseguir o que queria ajudado pelo PHP. Veja:
> >
> > <?php
> >
> > $conexao=pg_connect("host=10.40.2.75 dbname=apoena user=postgres
> > password=postgres");
> >
> > $sql="SELECT n.nspname as esquema,c.relname as tabela FROM
> > pg_namespace n, pg_class c
> > WHERE n.oid = c.relnamespace
> > and c.relkind = 'r' -- no indices
> > and n.nspname not like 'pg\\_%' -- no catalogs
> > and n.nspname != 'information_schema' -- no information_schema
> > ORDER BY nspname, relname";
> >
> > $consulta=pg_query($conexao,$sql);
> >
> > $resultado=pg_fetch_array($consulta,0);
> >
> >
> > while ($data = pg_fetch_object($consulta)) {
> > // print $data->esquema.'<br />';
> > //print $data->tabela.'<br />';
> > $esquematab=$data->esquema.'.'.$data->tabela;
> > $sql2="SELECT count(*) FROM $esquematab";
> > $cons=pg_query($conexao,$sql2);
> > $res=pg_fetch_array($cons);
> > $total += $res[0];
> > }
> > print "Total de Registro de todas as tabelas do banco apoena ".
> > $total;
> >
> > ?>
> >
> > --
> > Ribamar FS - ribafs[ ]users.sourceforge.com
> > http://www.ribafs.net
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> Antes de perguntar consulte o manual
> http://pgdocptbr.sourceforge.net/
>
> Para editar suas opções ou sair da lista acesse a página da lista em:
> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>
--
Ribamar FS - ribafs[ ]users.sourceforge.com
http://www.ribafs.net
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/
Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios