pessoal, com a ajuda do pessoal aqui na lista eu criei uma store procedure
que calcula o total de registros de cada tabela... com base neles eu
encontrei uma divergencia. deixa eu exemplificar melhor:

para ver o total de registros de uma tabela, normalmente eu uso a função
count:

*rgmadmhospdb_anapolis=# select count(*) from est057;*

* count
--------
287164
(1 registro)*

pela store procedure:


*rgmadmhospdb_anapolis=# SELECT relname, reltuples from pg_class tb INNER
JOIN pg_namespace SCH ON TB.relnamespace = SCH.oid WHERE relname = 'est057';
*

* relname | reltuples
---------+-----------
est057  |    287105
(1 registro)*


segue a store procedure pra ficar mais claro:


CREATE TABLE registros (
 tabela char(10) NOT NULL,
 total int8,
 CONSTRAINT registros_pkey PRIMARY KEY (tabela)
) WITHOUT OIDS;

-- CRIA A FUNÇÃO QUE CONTA OS VALORES

CREATE OR REPLACE FUNCTION contagem() RETURNS text AS $BODY$
DECLARE
recTot RECORD;
sql TEXT;
BEGIN
 FOR recTot IN *SELECT relname, reltuples from pg_class tb INNER JOIN
pg_namespace SCH ON TB.relnamespace = SCH.oid WHERE relname not like'pg%'
and nspname='public' AND tb.relkind = 'r'::"char"
*  LOOP
   EXECUTE 'ANALYZE '||recTot.relname;

   sql:= 'INSERT INTO registros VALUES
('''||recTot.relname||''','||recTot.reltuples||')';

   EXECUTE sql;
 END LOOP;
RETURN 'Acabou!!';
END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;

-- CHAMA A FUNÇÃO QUE CONTA OS VALORES
SELECT contagem();

Alguém saberia me dizer qual dos dois métodos é o mais correto ?

--
Atenciosamente,
Sebastian Selau Webber Colombo
_______________________________________________
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