Re: [pgbr-geral] duvida de uma consulta
2013/8/4 lucas . lucasouz...@hotmail.com Ola gente, tenho uma dúvida. Usando esta consulta SELECT * FROM Auth, Publ WHERE Auth.pubID = Publ.pubID AND Auth.nome = 'Surajit Chaudhuri' índices primários sobre Auth.pubID e Publ.pubID e índice secundário sobre Auth.nome. O algoritmo escolhido pelo postgre sera o Nested loop. Entendo que ele faz esta escolha pelo fato da seleção ser feita antes da junção dessa forma o desempenho da junção será melhor com o nested. Confirma? Em geral, o PostgreSQL tende a usar o nested loop quando está trabalhando com um conjunto pequeno de dados (pelo menos dos vindos da tabela da direita), mas veja que a definição de pequeno vai depender dos custos definidos. Nesse caso o filtro em Auth.nome pode sim explicar essa escolha. Poste o resultado do seguinte comando para te darmos uma resposta mais certeira: ANALYZE Auth; ANALYZE Publ; EXPLAIN ANALYZE SELECT * FROM Auth, Publ WHERE Auth.pubID = Publ.pubID AND Auth.nome = 'Surajit Chaudhuri' E outra dúvida, no pgadmin aonde que eu posso olhar a PEC da consulta? PEC seria o quê? Plano de execução? Acho que ele tem um botão para executar e mostrar, mas você também pode usar o EXPLAIN (como acima). Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] duvida de uma consulta
2013/8/4 lucas . lucasouz...@hotmail.com do postgre E eu estou enviando pelo meu email as respostas acho que por isto esta bagunçando a lista. Poderia me enviar o link da lista? ja perdi Pode enviar por e-mail mesmo, mas edite a resposta colocando sua abaixo da resposta do anterior. Como estou fazendo aqui. Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Marcelo, lamento lhe informar mas você está fazendo isso do jeito errado. Não é que sua função não funcione, mas por princípio não devemos substituir um SQL puro por um PL. Quando você faz isso, o otimizador de desempenho do postgres vai para o vinagre. Além disso, você declarou sua função como VOLATILE. Se declarar como IMMUTABLE, veria ganhos imediatos, vide: http://www.postgresql.org/docs/current/static/sql-createfunction.html Eu escrevi um pouco sobre como trabalhar com datas aqui: http://savepoint.blog.br/brincando-com-algumas-funcoes-com-data-no-postgresql/ 2013/8/5 Marcelo da Silva marc...@ig.com.br: Desculpa estava esquecendo de uma linha... Agora está OK -- Function: fproxdiautil(date) -- DROP FUNCTION fproxdiautil(date); CREATE OR REPLACE FUNCTION fdiasuteis(pData date, pDias integer) RETURNS date AS $BODY$ declare Dia integer; SomaDias integer; NovaData date; Begin SomaDias = 0; NovaData = pData; while (SomaDias pDias) loop NovaData = NovaData + 1; Dia = extract(dow from NovaData); while (Dia = 0 or Dia = 6) loop NovaData = NovaData + 1; Dia = extract(dow from NovaData); end loop; SomaDias = SomaDias + 1; end loop; return fproxdiautil(NovaData); end; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION fdiasuteis(date, integer) OWNER TO postgres; Marcelo Silva ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Valeu Fabio..., como eu citei eu não manjo, mas aqui tenho que fazer papel de DBA e tudo mais, sabcomé, então nem sobra tempo pra estudar essas funções detalhadamente, as dicas aqui da lista são excelentes... Vou tratar de mudar a função :) Mais uma vez, muito obrigado... Em 6 de agosto de 2013 08:50, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Marcelo, lamento lhe informar mas você está fazendo isso do jeito errado. Não é que sua função não funcione, mas por princípio não devemos substituir um SQL puro por um PL. Quando você faz isso, o otimizador de desempenho do postgres vai para o vinagre. Além disso, você declarou sua função como VOLATILE. Se declarar como IMMUTABLE, veria ganhos imediatos, vide: http://www.postgresql.org/docs/current/static/sql-createfunction.html Eu escrevi um pouco sobre como trabalhar com datas aqui: http://savepoint.blog.br/brincando-com-algumas-funcoes-com-data-no-postgresql/ 2013/8/5 Marcelo da Silva marc...@ig.com.br: Desculpa estava esquecendo de uma linha... Agora está OK -- Function: fproxdiautil(date) -- DROP FUNCTION fproxdiautil(date); CREATE OR REPLACE FUNCTION fdiasuteis(pData date, pDias integer) RETURNS date AS $BODY$ declare Dia integer; SomaDias integer; NovaData date; Begin SomaDias = 0; NovaData = pData; while (SomaDias pDias) loop NovaData = NovaData + 1; Dia = extract(dow from NovaData); while (Dia = 0 or Dia = 6) loop NovaData = NovaData + 1; Dia = extract(dow from NovaData); end loop; SomaDias = SomaDias + 1; end loop; return fproxdiautil(NovaData); end; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION fdiasuteis(date, integer) OWNER TO postgres; Marcelo Silva ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Evitar duplicidade no cadastro de faixas de ceps
Em 20 de julho de 2013 20:30, Danilo Silva danilo.dsg.go...@gmail.com escreveu: Pessoal, Tenho uma tabela de cadastro de faixas de ceps (cliente,cepinicial,cepfinal), onde não é permitido duplicidade de faixas para o mesmo cliente e que uma faixa fique dentro de outra, exemplo: Correto codigo | cliente | cepinicial | cepfinal +-++-- 1 | 1 | 0100 | 0159 2 | 1 | 0200 | 0299 3 | 1 | 0300 | 0499 (3 rows) Errado codigo | cliente | cepinicial | cepfinal +-++-- 1 | 1 | 0100 | 0159 2 | 1 | 0200 | 0299 3 | 1 | 0250 | 0499 (3 rows) Errado pois o cep 0250 já existe dentro da faixa anterior. Atualmente eu bloqueio o insert na aplicação e criei uma regra com *DO INSTEAD NOTHING* para evitar a duplicidade. Qual a melhor forma de evitar esses tipos de duplicidade, ou está certo da forma que está? Bom mesmo para resolver este problema seria usar range datatype. Ele já faz isso automaticamente para você: http://www.postgresql.org/docs/current/static/rangetypes.html []s Danilo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar a verificação em cada select do que ter uma função pra isso? Não entendi. Em 6 de agosto de 2013 08:54, Marcelo da Silva marc...@ig.com.br escreveu: Valeu Fabio..., como eu citei eu não manjo, mas aqui tenho que fazer papel de DBA e tudo mais, sabcomé, então nem sobra tempo pra estudar essas funções detalhadamente, as dicas aqui da lista são excelentes... Vou tratar de mudar a função :) Mais uma vez, muito obrigado... Em 6 de agosto de 2013 08:50, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Marcelo, lamento lhe informar mas você está fazendo isso do jeito errado. Não é que sua função não funcione, mas por princípio não devemos substituir um SQL puro por um PL. Quando você faz isso, o otimizador de desempenho do postgres vai para o vinagre. Além disso, você declarou sua função como VOLATILE. Se declarar como IMMUTABLE, veria ganhos imediatos, vide: http://www.postgresql.org/docs/current/static/sql-createfunction.html Eu escrevi um pouco sobre como trabalhar com datas aqui: http://savepoint.blog.br/brincando-com-algumas-funcoes-com-data-no-postgresql/ 2013/8/5 Marcelo da Silva marc...@ig.com.br: Desculpa estava esquecendo de uma linha... Agora está OK -- Function: fproxdiautil(date) -- DROP FUNCTION fproxdiautil(date); CREATE OR REPLACE FUNCTION fdiasuteis(pData date, pDias integer) RETURNS date AS $BODY$ declare Dia integer; SomaDias integer; NovaData date; Begin SomaDias = 0; NovaData = pData; while (SomaDias pDias) loop NovaData = NovaData + 1; Dia = extract(dow from NovaData); while (Dia = 0 or Dia = 6) loop NovaData = NovaData + 1; Dia = extract(dow from NovaData); end loop; SomaDias = SomaDias + 1; end loop; return fproxdiautil(NovaData); end; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION fdiasuteis(date, integer) OWNER TO postgres; Marcelo Silva ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Em 6 de agosto de 2013 08:56, Marcelo da Silva marc...@ig.com.br escreveu: Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar a verificação em cada select do que ter uma função pra isso? Não entendi. A regra de ouro é: se dá para fazer com SQL puro, não faça com PL. Quando você manda um comando para um SGDB, seja Postgres, SQL Server, Oracle, DB2 ou até o Mysql... eles tentam executar o seu comando da forma mais eficiente possível. Se você manda uma consulta envolvendo varias tabelas, ele vai avaliar em que ordem ele vai pegar as tabelas para executar a sua consulta. Quando você utiliza o PL, o otimizador perde a sua autonomia em favor da sua lógica de programação. Claro que se sua função é do tipo IMMUTABLE, isso não é tão importante, afinal, você não está consultando nenhuma tabela. Mas a sua função vai invariavelmente aparecer dentro de um SQL e aí as coisas vão se complicando. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
O mais importante deixei de lado: Quando devo usar VOLATILE IMMUTABLE STABLE ? Em 6 de agosto de 2013 10:22, Marcelo da Silva marc...@ig.com.br escreveu: Fabio, desculpa aproveitar da sua bondade, mas como cuido de muita coisa aqui, fica meio dificil assimilar algumas coisas no postgres, sei que para isso seria bom fazer um cursinho, mesmo que rápido em DBA Postgres, mas sabcome né, então eu lhe pergunto quais as diferenças entre IMMUTABLE, VOLATILE, e STABLE ? Li no manual, mas confeço que fiquei meio confuso, pois ele se refere a dados vindos de tabelas ou não, e ao mesmo tempo cita que os dados podem ser mudados ou não, não compreendi, pois na minha concepção a volatilidade dos dados dependeriam dos dados de entrada também, então o que torna uma função volatil ou não ? Pelo meu ver toda função seria volatil, a menos que se guardasse o resultado em alguma variavel ou tabela, sei lá... Em 6 de agosto de 2013 09:36, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Em 6 de agosto de 2013 08:56, Marcelo da Silva marc...@ig.com.br escreveu: Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar a verificação em cada select do que ter uma função pra isso? Não entendi. A regra de ouro é: se dá para fazer com SQL puro, não faça com PL. Quando você manda um comando para um SGDB, seja Postgres, SQL Server, Oracle, DB2 ou até o Mysql... eles tentam executar o seu comando da forma mais eficiente possível. Se você manda uma consulta envolvendo varias tabelas, ele vai avaliar em que ordem ele vai pegar as tabelas para executar a sua consulta. Quando você utiliza o PL, o otimizador perde a sua autonomia em favor da sua lógica de programação. Claro que se sua função é do tipo IMMUTABLE, isso não é tão importante, afinal, você não está consultando nenhuma tabela. Mas a sua função vai invariavelmente aparecer dentro de um SQL e aí as coisas vão se complicando. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Não se atende a sua necessidade, mas vou tentar ... Função para dias úteis, acrescentei também a tabela feriado conforme script abaixo: --DROP FUNCTION usf_prox_dia_util (data_inicialx date, diasx integer); CREATE OR REPLACE FUNCTION usf_prox_dia_util (data_inicialx date, diasx integer) RETURNS date AS $BODY$ SELECT max(dia::date) FROM ( SELECT (data_inicialx+s.a*'1 day'::INTERVAL) AS dia FROM generate_series(0, (data_inicialx + diasx) - data_inicialx, 1 ) AS s(a)) foo WHERE extract(dow FROM dia) BETWEEN 1 AND 5 EXCEPT SELECT data FROM feriado $BODY$ LANGUAGE 'sql'; Em 6 de agosto de 2013 09:36, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Em 6 de agosto de 2013 08:56, Marcelo da Silva marc...@ig.com.br escreveu: Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar a verificação em cada select do que ter uma função pra isso? Não entendi. A regra de ouro é: se dá para fazer com SQL puro, não faça com PL. Quando você manda um comando para um SGDB, seja Postgres, SQL Server, Oracle, DB2 ou até o Mysql... eles tentam executar o seu comando da forma mais eficiente possível. Se você manda uma consulta envolvendo varias tabelas, ele vai avaliar em que ordem ele vai pegar as tabelas para executar a sua consulta. Quando você utiliza o PL, o otimizador perde a sua autonomia em favor da sua lógica de programação. Claro que se sua função é do tipo IMMUTABLE, isso não é tão importante, afinal, você não está consultando nenhuma tabela. Mas a sua função vai invariavelmente aparecer dentro de um SQL e aí as coisas vão se complicando. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Assunto: Re: [pgbr-geral] Fwd: Funcão para contar dias uteis Fabio, desculpa aproveitar da sua bondade, mas como cuido de muita coisa aqui, fica meio dificil assimilar algumas coisas no postgres, sei que para isso seria bom fazer um cursinho, mesmo que rápido em DBA Postgres, mas sabcome né, então eu lhe pergunto quais as diferenças entre IMMUTABLE, VOLATILE, e STABLE ? Li no manual, mas confeço que fiquei meio confuso, pois ele se refere a dados vindos de tabelas ou não, e ao mesmo tempo cita que os dados podem ser mudados ou não, não compreendi, pois na minha concepção a volatilidade dos dados dependeriam dos dados de entrada também, então o que torna uma função volatil ou não ? Pelo meu ver toda função seria volatil, a menos que se guardasse o resultado em alguma variavel ou tabela, sei lá... Veja os exemplos deste post: http://postgresqlbr.blogspot.com.br/2012/08/categorias-de-volatilidade-de-funcoes.html Cordialmente, Cláudio Em 6 de agosto de 2013 09:36, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Em 6 de agosto de 2013 08:56, Marcelo da Silva marc...@ig.com.br escreveu: Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar a verificação em cada select do que ter uma função pra isso? Não entendi. A regra de ouro é: se dá para fazer com SQL puro, não faça com PL. Quando você manda um comando para um SGDB, seja Postgres, SQL Server, Oracle, DB2 ou até o Mysql... eles tentam executar o seu comando da forma mais eficiente possível. Se você manda uma consulta envolvendo varias tabelas, ele vai avaliar em que ordem ele vai pegar as tabelas para executar a sua consulta. Quando você utiliza o PL, o otimizador perde a sua autonomia em favor da sua lógica de programação. Claro que se sua função é do tipo IMMUTABLE, isso não é tão importante, afinal, você não está consultando nenhuma tabela. Mas a sua função vai invariavelmente aparecer dentro de um SQL e aí as coisas vão se complicando. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Em 6 de agosto de 2013 10:22, Marcelo da Silva marc...@ig.com.br escreveu: Fabio, desculpa aproveitar da sua bondade, mas como cuido de muita coisa aqui, fica meio dificil assimilar algumas coisas no postgres, sei que para isso seria bom fazer um cursinho, mesmo que rápido em DBA Postgres, mas sabcome né, então eu lhe pergunto quais as diferenças entre IMMUTABLE, VOLATILE, e STABLE ? Li no manual, mas confeço que fiquei meio confuso, pois ele se refere a dados vindos de tabelas ou não, e ao mesmo tempo cita que os dados podem ser mudados ou não, não compreendi, pois na minha concepção a volatilidade dos dados dependeriam dos dados de entrada também, então o que torna uma função volatil ou não ? Pelo meu ver toda função seria volatil, a menos que se guardasse o resultado em alguma variavel ou tabela, sei lá... Vamos lá... Uma função é imutável se os dados que ela vai retornar dependem apenas dos dados passados na chamada da função. Ou seja: você pode alterar os dados de qualquer tabela que o resultado da função não muda. Imagine que você chame a função soma(x + y). Não importa o conteúdo das suas tabelas, se x= 2 e y=3 o resultado sempre será 5. Sacou? Uma função estável consulta dados de uma ou mais tabela, mas não altera nada. Uma função volátil como atualiza_estoque(item, quantidade) já realiza um UPDATE, INSERT ou DELETE em algum tabela. Saber classificar direito uma função é importante, pois o Postgres conseguem otimizar de maneira mais agressiva funções estáveis e imutáveis. No entanto se você tiver uma função volátil criada com imutável, ela não vai funcionar direito. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Hum... show, ali está bem explicado... Vou analisar minhas funções... Só um comentário achei estranho, no inicio ele diz que: O lado negativo de se empregar funções no Postgres ou em qualquer SGBD é a necessidade de um tempo significativo de processamento Eu sempre vi as funções dentro do banco como uma virtude justamente pelo ganho de processamento. Será que estou errado denovo? Em 6 de agosto de 2013 10:34, Claudio Bezerra Leopoldino claudiob...@yahoo.com.br escreveu: *Assunto:* Re: [pgbr-geral] Fwd: Funcão para contar dias uteis Fabio, desculpa aproveitar da sua bondade, mas como cuido de muita coisa aqui, fica meio dificil assimilar algumas coisas no postgres, sei que para isso seria bom fazer um cursinho, mesmo que rápido em DBA Postgres, mas sabcome né, então eu lhe pergunto quais as diferenças entre IMMUTABLE, VOLATILE, e STABLE ? Li no manual, mas confeço que fiquei meio confuso, pois ele se refere a dados vindos de tabelas ou não, e ao mesmo tempo cita que os dados podem ser mudados ou não, não compreendi, pois na minha concepção a volatilidade dos dados dependeriam dos dados de entrada também, então o que torna uma função volatil ou não ? Pelo meu ver toda função seria volatil, a menos que se guardasse o resultado em alguma variavel ou tabela, sei lá... Veja os exemplos deste post: http://postgresqlbr.blogspot.com.br/2012/08/categorias-de-volatilidade-de-funcoes.html Cordialmente, Cláudio Em 6 de agosto de 2013 09:36, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Em 6 de agosto de 2013 08:56, Marcelo da Silva marc...@ig.com.br escreveu: Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar a verificação em cada select do que ter uma função pra isso? Não entendi. A regra de ouro é: se dá para fazer com SQL puro, não faça com PL. Quando você manda um comando para um SGDB, seja Postgres, SQL Server, Oracle, DB2 ou até o Mysql... eles tentam executar o seu comando da forma mais eficiente possível. Se você manda uma consulta envolvendo varias tabelas, ele vai avaliar em que ordem ele vai pegar as tabelas para executar a sua consulta. Quando você utiliza o PL, o otimizador perde a sua autonomia em favor da sua lógica de programação. Claro que se sua função é do tipo IMMUTABLE, isso não é tão importante, afinal, você não está consultando nenhuma tabela. Mas a sua função vai invariavelmente aparecer dentro de um SQL e aí as coisas vão se complicando. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Valeu Fabio... estou aprimorando no postgres e vocês estão de parabéns Em 6 de agosto de 2013 10:43, Marcelo da Silva marc...@ig.com.br escreveu: Hum... show, ali está bem explicado... Vou analisar minhas funções... Só um comentário achei estranho, no inicio ele diz que: O lado negativo de se empregar funções no Postgres ou em qualquer SGBD é a necessidade de um tempo significativo de processamento Eu sempre vi as funções dentro do banco como uma virtude justamente pelo ganho de processamento. Será que estou errado denovo? Em 6 de agosto de 2013 10:34, Claudio Bezerra Leopoldino claudiob...@yahoo.com.br escreveu: *Assunto:* Re: [pgbr-geral] Fwd: Funcão para contar dias uteis Fabio, desculpa aproveitar da sua bondade, mas como cuido de muita coisa aqui, fica meio dificil assimilar algumas coisas no postgres, sei que para isso seria bom fazer um cursinho, mesmo que rápido em DBA Postgres, mas sabcome né, então eu lhe pergunto quais as diferenças entre IMMUTABLE, VOLATILE, e STABLE ? Li no manual, mas confeço que fiquei meio confuso, pois ele se refere a dados vindos de tabelas ou não, e ao mesmo tempo cita que os dados podem ser mudados ou não, não compreendi, pois na minha concepção a volatilidade dos dados dependeriam dos dados de entrada também, então o que torna uma função volatil ou não ? Pelo meu ver toda função seria volatil, a menos que se guardasse o resultado em alguma variavel ou tabela, sei lá... Veja os exemplos deste post: http://postgresqlbr.blogspot.com.br/2012/08/categorias-de-volatilidade-de-funcoes.html Cordialmente, Cláudio Em 6 de agosto de 2013 09:36, Fábio Telles Rodriguez fabio.tel...@gmail.com escreveu: Em 6 de agosto de 2013 08:56, Marcelo da Silva marc...@ig.com.br escreveu: Outro detalhe, relendo seu Post, você está dizendo que é melhor utilizar a verificação em cada select do que ter uma função pra isso? Não entendi. A regra de ouro é: se dá para fazer com SQL puro, não faça com PL. Quando você manda um comando para um SGDB, seja Postgres, SQL Server, Oracle, DB2 ou até o Mysql... eles tentam executar o seu comando da forma mais eficiente possível. Se você manda uma consulta envolvendo varias tabelas, ele vai avaliar em que ordem ele vai pegar as tabelas para executar a sua consulta. Quando você utiliza o PL, o otimizador perde a sua autonomia em favor da sua lógica de programação. Claro que se sua função é do tipo IMMUTABLE, isso não é tão importante, afinal, você não está consultando nenhuma tabela. Mas a sua função vai invariavelmente aparecer dentro de um SQL e aí as coisas vão se complicando. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 -- Marcelo Silva Desenvolvedor Delphi / PHP My Postgres database Cel.: (11) 99693-4251 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: Funcão para contar dias uteis
Em 6 de agosto de 2013 10:43, Marcelo da Silva marc...@ig.com.br escreveu: Hum... show, ali está bem explicado... Vou analisar minhas funções... Só um comentário achei estranho, no inicio ele diz que: O lado negativo de se empregar funções no Postgres ou em qualquer SGBD é a necessidade de um tempo significativo de processamento Eu sempre vi as funções dentro do banco como uma virtude justamente pelo ganho de processamento. Será que estou errado denovo? Longa história. DEPENDE!!! Em geral, rotinas em lote rodam mais rápido em funções dentro do banco. Mas tem um problema... é mais fácil escalar processamento na aplicação do que no banco. Ex: Você pode ter dezenas de servidores web distribuindo a carga. Mas no banco de dados isso é uma história bem mais complicada. Tem gente que faz TUDO dentro do banco de dados. Tem de dosar um pouco as coisas. Tenho clientes que abusaram das funções e ao invés de ter gargalo de I/O como é comum em banco de dados, eles tem gargalo de CPU. -- Atenciosamente, Fábio Telles Rodriguez blog: http://savepoint.blog.br e-mail / gtalk / MSN: fabio.tel...@gmail.com Skype: fabio_telles Timbira - A empresa brasileira de Postgres http://www.timbira.com.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral