Obrigado, Osvaldo. Vou testar e se surgir alguma dúvida retomo a discussão.

-- 
Tiago J. Adami
Dois Vizinhos - Paraná - Brasil


2009/7/30 Osvaldo Kussama <[email protected]>

> 2009/7/30 Tiago Adami <[email protected]>:
> > Seguindo o raciocínio do nobre colega Fábio Ebner, tenho um problema que
> não
> > consegui resolver de forma que não degrade a performance...
> >
> > Tenho uma tabela com 11 milhões de registros. Existe um campo que é um
> > contador numérico, e é uma AK da tabela (contador de transação). Pois
> bem...
> > eu gostaria de um SELECT que retornasse apenas os números que não estão
> > nesta tabela em um intervalo de 1 a 11.000.000 (que é o total de
> registros).
> > Se eu delimitasse o máximo até 10, seria assim:
> > [Registros na tabela]
> > 1
> > 2
> >    3 --> não existe
> > 4
> > 5
> > 6
> > 8
> >    7 --> não existe
> > 9
> > 10
> > (...)
> >
> > Até 10, os números que o select deveria retornar são:
> > [Registros que não estão na tabela]
> > 3
> > 7
> >
> > Hoje eu uso um trigger que alimenta uma tabela auxiliar cada vez que um
> > registro é eliminado. Isto é rápido, mas gostaria de saber se existe uma
> > forma de criar uma função ou algo parecido que não use trigger e não seja
> > muito demorado (considerando 11 milhões de registros).
> >
> > Desculpem a impertinência, mas alguém tem alguma sugestão melhor?
> >
>
>
> bdteste=# CREATE TEMP TABLE foo(num int);
> CREATE TABLE
> bdteste=# INSERT INTO foo VALUES (1),(2),(4),(5),(6),(8),(9),(10);
> INSERT 0 8
>
> bdteste=# SELECT x FROM (SELECT generate_series(1,10)) AS f(x) LEFT
> OUTER JOIN foo ON (f.x = num) WHERE num IS NULL;
>  x
> ---
>  3
>  7
> (2 registros)
>
> ou ainda:
>
> bdteste=# SELECT generate_series(1,10) EXCEPT SELECT num FROM foo;
>  generate_series
> -----------------
>               3
>               7
> (2 registros)
>
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a