Re: Contador/Sequenciador na consulta SQL

View: New views
5 Messages — Rating Filter:   Alert me  

Re: Contador/Sequenciador na consulta SQL

by Joao Cosme de Oliveira Junior-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Com certeza... Volpato mas win function so na 8.4...

Em relação ao cross join acho q nao gera nao... olha o explain

na querie acima acho q nao faz um cross join nao, se quizer testar veja o explain de uma query simples

explain analyze select generate_series(1,(select count(*) from pg_class)),'joao' from pg_class;

Abraços!!

João Cosme de Oliveira Júnior

Seja inteligente, use Software-livre!!!
LPI Certified
LPI000185554


Em 05/11/2009 às 15:56 horas, pgbr-geral@... escreveu:
Joao Cosme de Oliveira Junior escreveu:
> select generate_series(1,(select count(*) from sua_tabeça)), nome
> from sua_tabela
>

Grande Jão!
Essa query acima vai fazer um cross join, e pode não ser o resultado
esperado...


>
> ou crie uma sequence e chame o nextval....
>

É uma saída !

Para um tratado completo sobre o tema, na versão 8.3 pra trás, veja aqui [1]

Se você já estiver na 8.4, pesquise sobre window functions, já tem algo
pronto para isso.


[1]
http://www.depesz.com/index.php/2007/08/17/rownum-anyone-cumulative-sum-in-one-query/


--

[]´s, André Volpato



_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


"Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é enviada exclusivamente a seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional. Sua utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, esclarecendo o equívoco."

"This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules. Its unauthorized use is illegal and may subject the transgressor to the law's penalties. If you're not the addressee, please send it back, elucidating the failure."

_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Contador/Sequenciador na consulta SQL

by André Volpato :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Joao Cosme de Oliveira Junior escreveu:
Com certeza... Volpato mas win function so na 8.4...

Em relação ao cross join acho q nao gera nao... olha o explain

na querie acima acho q nao faz um cross join nao, se quizer testar veja o explain de uma query simples

explain analyze select generate_series(1,(select count(*) from pg_class)),'joao' from pg_class;


Rode a query, pelo explain pode não ficar muito claro.

A quantidade de linhas vai ser (select count(*) from pg_class) ao quadrado!


-- 

[]´s, André Volpato


Abraços!!

João Cosme de Oliveira Júnior

Seja inteligente, use Software-livre!!!
LPI Certified
LPI000185554


Em 05/11/2009 às 15:56 horas, pgbr-geral@... escreveu:
Joao Cosme de Oliveira Junior escreveu:
> select generate_series(1,(select count(*) from sua_tabeça)), nome
> from sua_tabela
>

Grande Jão!
Essa query acima vai fazer um cross join, e pode não ser o resultado
esperado...


>
> ou crie uma sequence e chame o nextval....
>

É uma saída !

Para um tratado completo sobre o tema, na versão 8.3 pra trás, veja aqui [1]

Se você já estiver na 8.4, pesquise sobre window functions, já tem algo
pronto para isso.


[1]
http://www.depesz.com/index.php/2007/08/17/rownum-anyone-cumulative-sum-in-one-query/


--

[]´s, André Volpato


_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Parent Message unknown Re: Contador/Sequenciador na consulta SQL

by Joao Cosme de Oliveira Junior-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Não ao quadrado jovem....

postgres=# explain select generate_series(1,(select count(*) from pg_class)),relname from pg_class;
                               QUERY PLAN                              
------------------------------------------------------------------------
 Seq Scan on pg_class  (cost=8.84..17.66 rows=226 width=64)
   InitPlan
     ->  Aggregate  (cost=8.83..8.84 rows=1 width=0)
           ->  Seq Scan on pg_class  (cost=0.00..8.26 rows=226 width=0)
(4 rows)

Seria 2X.... 226 na primaira e 226 .... e 226 na segunda e nao 226 *226 ... por isso


Isso abaixo seria um CROSS join !!

postgres=# explain select a.relname from pg_class a,pg_class b;
                               QUERY PLAN                              
------------------------------------------------------------------------
 Nested Loop  (cost=8.49..1038.27 rows=51076 width=64)
   ->  Seq Scan on pg_class a  (cost=0.00..8.26 rows=226 width=64)
   ->  Materialize  (cost=8.49..10.75 rows=226 width=0)
         ->  Seq Scan on pg_class b  (cost=0.00..8.26 rows=226 width=0)
(4 rows)

e aí teriamos 226 * 226 = 51076

Abraços jovem!!!





João Cosme de Oliveira Júnior

Seja inteligente, use Software-livre!!!
LPI Certified
LPI000185554


Em 05/11/2009 às 16:18 horas, pgbr-geral@... escreveu:
Joao Cosme de Oliveira Junior escreveu:
Com certeza... Volpato mas win function so na 8.4...

Em relação ao cross join acho q nao gera nao... olha o explain

na querie acima acho q nao faz um cross join nao, se quizer testar veja o explain de uma query simples

explain analyze select generate_series(1,(select count(*) from pg_class)),'joao' from pg_class;


Rode a query, pelo explain pode não ficar muito claro.

A quantidade de linhas vai ser (select count(*) from pg_class) ao quadrado!


-- 

[]´s, André Volpato


Abraços!!

João Cosme de Oliveira Júnior

Seja inteligente, use Software-livre!!!
LPI Certified
LPI000185554


Em 05/11/2009 às 15:56 horas, pgbr-geral@... escreveu:
Joao Cosme de Oliveira Junior escreveu:
> select generate_series(1,(select count(*) from sua_tabeça)), nome
> from sua_tabela
>

Grande Jão!
Essa query acima vai fazer um cross join, e pode não ser o resultado
esperado...


>
> ou crie uma sequence e chame o nextval....
>

É uma saída !

Para um tratado completo sobre o tema, na versão 8.3 pra trás, veja aqui [1]

Se você já estiver na 8.4, pesquise sobre window functions, já tem algo
pronto para isso.


[1]
http://www.depesz.com/index.php/2007/08/17/rownum-anyone-cumulative-sum-in-one-query/


--

[]´s, André Volpato



"Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é enviada exclusivamente a seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional. Sua utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, esclarecendo o equívoco."

"This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules. Its unauthorized use is illegal and may subject the transgressor to the law's penalties. If you're not the addressee, please send it back, elucidating the failure."

_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Contador/Sequenciador na consulta SQL

by André Volpato :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Joao Cosme de Oliveira Junior escreveu:
>
> Não ao quadrado jovem....
>
Só não brigo com vc pq vc tá longe ! :P


> postgres=# explain select generate_series(1,(select count(*) from
> pg_class)),relname from pg_class;
>                                QUERY PLAN                              
> ------------------------------------------------------------------------
>  Seq Scan on pg_class  (cost=8.84..17.66 rows=226 width=64)

Com explain ele "acha" que não vai ter cross-join.
Repete com explain analyze, aí ele vai retornar 226*226 rows.
Pelo menos aqui está assim...

Vou me retirar agora, qualquer coisa continuamos no gtalk. Já saímos do
escopo né ?

--

[]´s, André Volpato


_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: Contador/Sequenciador na consulta SQL

by Eder Sousa :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Outra sugestão:
 
create temp sequence b;
select nextva('b'::regclass),campo1, campo2, campo3 from sua_tabela where suacondicao;
drop sequence b;
 
[]´s,
________________________________
Eder Sousa
skype:softpira?chat
edersousa-at-gmail.com
gescla-postgresql-ubuntu-php

_______________________________________________
pgbr-geral mailing list
pgbr-geral@...
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral