Oi Jose,

Para pegar aproximadamente 1 de cada 10 registros da sua tabela, faça o
seguinte:

--insert into ONDEVOCEQUISER
select * 
from SUATABELA
where (
cast(
  substring(
  cast(ctid as varchar(20)),
  2,
  position(',' in cast(ctid as varchar(20)))-2 )
  as int) * 199+
cast(
  substring(
  cast(ctid as varchar(20)),
  position(',' in cast(ctid as varchar(20)))+1,
  length(rtrim(cast(ctid as varchar(20)))) - position(',' in cast(ctid as
varchar(20)))-1 )
  as int) )
% 10=1

Troque o 10 da última linha pela taxa de amostragem que te convier.
(Sim, eu também sinto uma falta desgraçada do rowid do Oracle)
Devido ao tamanho dos registros influenciarem na distribuição dos ctids,
você pode não ter *exatamente* 10% dos registros no caso acima (apesar de eu
duvidar que a margem de erro tire teu sono). Isso pode ser minimizado rodando
um vacuum full antes da exportação ou escolhendo outro primo no lugar do 199
que seja mais próximo do número de registros por bloco da tabela desejada.

Atenciosamente,

Mozart Hasse

> From: Jose Luis Ramos <[email protected]>
> Preciso fazer uma funçaõ que, para cada tabela do banco com esse prefixo
> (cdrger*), eu leia um registro, grave de alguma forma (por exemplo em uma
> tab temp), pulo x registros, gravo o próximo, pulo mais x registros, e
assim
> por diante. O objetivo é gerar uma base menor que a base que estou lendo.




_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a