Sugestão: PL/pgSQL + DBLink!

\i /usr/share/postgresql/8.1/contrib/dblink.sql

create or replace function total_linhas_cluster() returns bigint as $$
declare
  rdb record;
  linhas bigint;
  soma bigint := 0;
begin
  for rdb in
    select datname
    from pg_database
    where datallowconn and not datistemplate
  loop
    select into linhas tuplas
    from dblink('port=' || current_setting('port') || ' dbname=' ||
rdb.datname, '
      SELECT sum(reltuples)::bigint
      FROM pg_namespace n, pg_class c
      WHERE n.oid = c.relnamespace
        AND c.relkind = ''r''
        AND n.nspname not like ''pg\\_%''
        AND n.nspname != ''information_schema''
    ') as (tuplas bigint);
    soma := soma + coalesce(linhas, 0);
    raise notice '%... %', rdb.datname, linhas;
  end loop;
  return soma;
end
$$ language plpgsql;

Veja o teste que eu fiz na minha máquina:

rodrigo=# select total_linhas_cluster();
NOTA:  pool... <NULL>
NOTA:  zahle3... 410557
NOTA:  zahle... 529901
NOTA:  postgres... <NULL>
NOTA:  rodrigo... 1042
NOTA:  cepnovo... 139314
NOTA:  cidades... 453
NOTA:  contab... <NULL>
NOTA:  correios... 2228834
NOTA:  deferred... 23
NOTA:  depends... 0
NOTA:  genie... 65
NOTA:  icewall... 5
NOTA:  orkut... 16
NOTA:  sqlmag... 25
NOTA:  sqlmag2... 96
NOTA:  super15... 1843963
NOTA:  test... 40
NOTA:  ts2... 67
NOTA:  unicenp... 0
 total_linhas_cluster
----------------------
              5154401
(1 registro)


-- 
Rodrigo Hjort
http://icewall.org/~hjort


2006/9/20, Ribamar Sousa <[EMAIL PROTECTED]>:
> 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?
>
_______________________________________________
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