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

Responder a