É windows XP. Simplesmente o pg_ctl.exe não executava em algumas máquinas, apresentava um erro de SO (no momento não me lembro qual). Bom, pesquisei bastante, tentei aplicar na ocasião as várias soluções que pude encontrar e nada. Agora na versão 9 beta 1 e 2 não ocorreu a mesma situação.
Obrigado mais uma vez pela atenção. -----Mensagem original----- De: [email protected] [mailto:[email protected]] Em nome de [email protected] Enviada em: quinta-feira, 15 de julho de 2010 10:48 Para: [email protected] Assunto: Digest pgbr-geral, volume 41, assunto 22 Send pgbr-geral mailing list submissions to [email protected] To subscribe or unsubscribe via the World Wide Web, visit https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral or, via email, send a message with subject or body 'help' to [email protected] You can reach the person managing the list at [email protected] When replying, please edit your Subject line so it is more specific than "Re: Contents of pgbr-geral digest..." Tópicos de Hoje: 1. pldebugger (Alex Brito) 2. RES: Digest pgbr-geral, volume 41, assunto 21 (Ruy Carlos Nunes de Souza) 3. Re: RES: Digest pgbr-geral, volume 41, assunto 21 (JotaComm) ---------------------------------------------------------------------- Message: 1 Date: Thu, 15 Jul 2010 06:35:07 -0700 (PDT) From: Alex Brito <[email protected]> Subject: [pgbr-geral] pldebugger To: [email protected] Message-ID: <[email protected]> Content-Type: text/plain; charset="iso-8859-1" Bom dia! Alguém sabe como configurar o debugger function em um postgres 8.3 que roda em um SO linux? Att, Alex F. Brito. -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/5674c63c/attachment-0001.htm ------------------------------ Message: 2 Date: Thu, 15 Jul 2010 10:41:52 -0300 From: Ruy Carlos Nunes de Souza <[email protected]> Subject: [pgbr-geral] RES: Digest pgbr-geral, volume 41, assunto 21 To: "[email protected]" <[email protected]> Message-ID: <187093016958424491049e42de24722b01093432b...@sac0991.ac.correiosnet.int> Content-Type: text/plain; charset="iso-8859-1" OK. Atualmente utilizo a versão 8.1. Tenho várias versões na minha máquina e acabei passando batido por esse detalhe (estava utilizando o manual da versão 8.4). Tentei utilizar a versão 8.4 mas tive problemas para rodar o serviço em algumas máquinas. Estou aguardando a versão 9.0 (produção). Agradeço pela rápida resposta. -----Mensagem original----- De: [email protected] [mailto:[email protected]] Em nome de [email protected] Enviada em: quinta-feira, 15 de julho de 2010 10:21 Para: [email protected] Assunto: Digest pgbr-geral, volume 41, assunto 21 Send pgbr-geral mailing list submissions to [email protected] To subscribe or unsubscribe via the World Wide Web, visit https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral or, via email, send a message with subject or body 'help' to [email protected] You can reach the person managing the list at [email protected] When replying, please edit your Subject line so it is more specific than "Re: Contents of pgbr-geral digest..." Tópicos de Hoje: 1. Utilização do WITH em SELECT (Ruy Carlos Nunes de Souza) 2. Função Dinâmica, qual melhor forma de criar? (Angelo - Web Studio Brasil) 3. Re: Utilização do WITH em SELECT (JotaComm) 4. Re: Função Dinâmica, qual melhor forma de criar? (JotaComm) ---------------------------------------------------------------------- Message: 1 Date: Thu, 15 Jul 2010 09:25:22 -0300 From: Ruy Carlos Nunes de Souza <[email protected]> Subject: [pgbr-geral] Utilização do WITH em SELECT To: "[email protected]" <[email protected]> Message-ID: <187093016958424491049e42de24722b01093432b...@sac0991.ac.correiosnet.int> Content-Type: text/plain; charset="iso-8859-1" Bom dia, Estou com problema de utilização da cláusula WITH com SELECT. Segundo manual poderia utiliza-lo da seguinte forma: 7.8. WITH Queries WITH provides a way to write subqueries for use in a larger SELECT query. The subqueries can be thought of as defining temporary tables that exist just for this query. One use of this feature is to break down complicated queries into simpler parts. An example is: WITH regional_sales AS ( SELECT region, SUM(amount) AS total_sales FROM orders GROUP BY region ), top_regions AS ( SELECT region FROM regional_sales WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales) ) SELECT region, product, SUM(quantity) AS product_units, SUM(amount) AS product_sales FROM orders WHERE region IN (SELECT region FROM top_regions) GROUP BY region, product; Só que quando tento utilizar no pgAdmin um exemplo parecido, me é apresentado o seguinte erro: ERROR: syntax error at or near "with" SQL state: 42601 Alguém poderia ajudar? -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/8732f34a/attachment-0001.htm ------------------------------ Message: 2 Date: Thu, 15 Jul 2010 06:00:23 -0700 (PDT) From: Angelo - Web Studio Brasil <[email protected]> Subject: [pgbr-geral] Função Dinâmica, qual melhor forma de criar? To: [email protected] Message-ID: <[email protected]> Content-Type: text/plain; charset="iso-8859-1" Amigos, bom dia, Estou em um impasse querendo saber dos mais experientes qual a melhor forma de criar funções dinâmicas no PostgreSQL. Qual dos 2 cenários abaixo é o melhor em termos de performance, lembrando que esta consulta é simples, mas o intuito da pergunta é para funções mais complexas que analisam tabela com grandes quantidades de registros fazendo joins entre elas: 1 - Cenário: Criar a consulta com vários JOINS e fazer um IF na função colocando os respectivos WHERE de acordo com os parametros passados: Ex: CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf character varying ) RETURNS SETOF public.f_teste AS $BODY$ DECLARE var_row public.f_teste%ROWTYPE; var_record RECORD; var_strSQL VARCHAR; BEGIN var_strSQL := ' SELECT cliente.id, cliente.nome FROM cliente join uf on uf.id = cliente.uf_id WHERE 1 = 1 '; IF (p_id IS NOT NULL) THEN var_strSQL := var_strSQL || ' AND cliente.id = ' || p_id; END IF; IF (p_uf IS NOT NULL) THEN var_strSQL := var_strSQL || ' AND uf.sigla = ''' || p_uf || ''''; END IF; FOR var_record IN EXECUTE var_strSQL LOOP var_row.id := var_record.id; var_row.cliente_nome := var_record.nome; RETURN NEXT var_row; END LOOP; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; 2 - Cenário: Criar a consulta com vários IF's colocando os respectivos JOIN e WHEREs de acordo com os parametros passados: Ex: CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf character varying ) RETURNS SETOF public.f_teste AS $BODY$ DECLARE var_row public.f_teste%ROWTYPE; var_record RECORD; var_join VARCHAR; var_where VARCHAR; var_strSQL VARCHAR; BEGIN IF (p_id IS NOT NULL) THEN var_where := var_where || ' AND cliente.id = ' || p_id; END IF; IF (p_uf IS NOT NULL) THEN var_join := var_join || ' join uf on uf.id = cliente.uf_id '; var_where := var_where || ' AND uf.sigla = ''' || p_uf || ''''; END IF; var_strSQL := ' SELECT cliente.id, cliente.nome FROM cliente ' || var_join || ' WHERE 1 = 1 ' || var_where; FOR var_record IN EXECUTE var_strSQL LOOP var_row.id := var_record.id; var_row.cliente_nome := var_record.nome; RETURN NEXT var_row; END LOOP; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/fc579b63/attachment-0001.htm ------------------------------ Message: 3 Date: Thu, 15 Jul 2010 10:15:02 -0300 From: JotaComm <[email protected]> Subject: Re: [pgbr-geral] Utilização do WITH em SELECT To: Comunidade PostgreSQL Brasileira <[email protected]> Message-ID: <[email protected]> Content-Type: text/plain; charset="iso-8859-1" Olá, Em 15 de julho de 2010 09:25, Ruy Carlos Nunes de Souza < [email protected]> escreveu: > Bom dia, > > Estou com problema de utilização da cláusula WITH com SELECT. > Segundo manual poderia utiliza-lo da seguinte forma: > Qual versão do PG? Este recurso está disponível apenas da versão 8.4. > > * > > 7.8. > WITH Queries* > > WITH > provides a way to write subqueries for use in a larger SELECT query. > The subqueries can be > > thought of as defining temporary tables that exist just for this > query. One use of this feature is to break > > down complicated queries into simpler parts. An example is: > > WITH regional_sales AS ( > > SELECT region, SUM(amount) AS total_sales > > FROM orders > > GROUP BY region > > ), top_regions AS ( > > SELECT region > > FROM regional_sales > > WHERE total_sales > > (SELECT SUM(total_sales)/10 FROM regional_sales) > > ) > > SELECT region, > > product, > > SUM(quantity) AS product_units, > > SUM(amount) AS product_sales > > FROM orders > > WHERE region IN (SELECT region FROM top_regions) > > GROUP BY region, product; > > Só que quando tento utilizar no pgAdmin um exemplo parecido, me é > apresentado o seguinte erro: > > ERROR: syntax error at or near "with" > SQL state: 42601 > > Alguém poderia ajudar? > > > > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > []s -- JotaComm http://jotacomm.wordpress.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/f11a9465/attachment-0001.htm ------------------------------ Message: 4 Date: Thu, 15 Jul 2010 10:20:18 -0300 From: JotaComm <[email protected]> Subject: Re: [pgbr-geral] Função Dinâmica, qual melhor forma de criar? To: Comunidade PostgreSQL Brasileira <[email protected]> Message-ID: <[email protected]> Content-Type: text/plain; charset="iso-8859-1" Olá, Em 15 de julho de 2010 10:00, Angelo - Web Studio Brasil < [email protected]> escreveu: > Amigos, bom dia, > > Estou em um impasse querendo saber dos mais experientes qual a melhor > forma de criar funções dinâmicas no PostgreSQL. > Eu trabalharia com outra questão. Na definição da função definir a função como: RETURNS NULL ON NULL INPUT, assim sendo a função retorna diretamente NULL se algum dos parâmetros for NULL. > > Qual dos 2 cenários abaixo é o melhor em termos de performance, > lembrando que esta consulta é simples, mas o intuito da pergunta é > para funções mais complexas que analisam tabela com grandes > quantidades de registros fazendo joins entre elas: > > 1 - Cenário: > Criar a consulta com vários JOINS e fazer um IF na função colocando os > respectivos WHERE de acordo com os parametros passados: > Ex: > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > character varying ) > RETURNS SETOF public.f_teste AS > $BODY$ > DECLARE > var_row public.f_teste%ROWTYPE; > var_record RECORD; > var_strSQL VARCHAR; > BEGIN > var_strSQL := ' > SELECT > cliente.id, > cliente.nome > FROM cliente > join uf on uf.id = cliente.uf_id > WHERE 1 = 1 > '; > IF (p_id IS NOT NULL) THEN > var_strSQL := var_strSQL || ' AND cliente.id = ' || p_id; > END IF; > > IF (p_uf IS NOT NULL) THEN > var_strSQL := var_strSQL || ' AND uf.sigla = ''' || p_uf || ''''; > END IF; > > FOR var_record IN > EXECUTE var_strSQL > LOOP > var_row.id := var_record.id; > var_row.cliente_nome := var_record.nome; > RETURN NEXT var_row; > END LOOP; > > RETURN; > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > 2 - Cenário: > Criar a consulta com vários IF's colocando os respectivos JOIN e > WHEREs de acordo com os parametros passados: > Ex: > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > character varying ) > RETURNS SETOF public.f_teste AS > $BODY$ > DECLARE > var_row public.f_teste%ROWTYPE; > var_record RECORD; > var_join VARCHAR; > var_where VARCHAR; > var_strSQL VARCHAR; > BEGIN > > IF (p_id IS NOT NULL) THEN > var_where := var_where || ' AND cliente.id = ' || p_id; > END IF; > > IF (p_uf IS NOT NULL) THEN > var_join := var_join || ' join uf on uf.id = cliente.uf_id '; > var_where := var_where || ' AND uf.sigla = ''' || p_uf || ''''; > END IF; > > var_strSQL := ' > SELECT > cliente.id, > cliente.nome > FROM cliente > ' || var_join || ' > WHERE 1 = 1 > ' || var_where; > > FOR var_record IN > EXECUTE var_strSQL > LOOP > var_row.id := var_record.id; > var_row.cliente_nome := var_record.nome; > RETURN NEXT var_row; > END LOOP; > > RETURN; > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > []s -- JotaComm http://jotacomm.wordpress.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/e4c9d03e/attachment.htm ------------------------------ _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Fim da Digest pgbr-geral, volume 41, assunto 21 *********************************************** ------------------------------ Message: 3 Date: Thu, 15 Jul 2010 10:47:05 -0300 From: JotaComm <[email protected]> Subject: Re: [pgbr-geral] RES: Digest pgbr-geral, volume 41, assunto 21 To: Comunidade PostgreSQL Brasileira <[email protected]> Message-ID: <[email protected]> Content-Type: text/plain; charset="iso-8859-1" Opa, Em 15 de julho de 2010 10:41, Ruy Carlos Nunes de Souza < [email protected]> escreveu: > > OK. Atualmente utilizo a versão 8.1. Tenho várias versões na minha > máquina e acabei passando batido por esse detalhe (estava utilizando o > manual da versão 8.4). Tentei utilizar a versão 8.4 mas tive problemas > para rodar o serviço em algumas máquinas. Estou aguardando a versão 9.0 > (produção). > Quer nos falar dos problemas com a versão 8.4? Ambiente Linux? Windows? > > Agradeço pela rápida resposta. > > -----Mensagem original----- > De: [email protected] [mailto: > [email protected]] Em nome de > [email protected] > Enviada em: quinta-feira, 15 de julho de 2010 10:21 > Para: [email protected] > Assunto: Digest pgbr-geral, volume 41, assunto 21 > > Send pgbr-geral mailing list submissions to > [email protected] > > To subscribe or unsubscribe via the World Wide Web, visit > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > or, via email, send a message with subject or body 'help' to > [email protected] > > You can reach the person managing the list at > [email protected] > > When replying, please edit your Subject line so it is more specific > than > "Re: Contents of pgbr-geral digest..." > > > Tópicos de Hoje: > > 1. Utilização do WITH em SELECT (Ruy Carlos Nunes de Souza) > 2. Função Dinâmica, qual melhor forma de criar? > (Angelo - Web Studio Brasil) > 3. Re: Utilização do WITH em SELECT (JotaComm) > 4. Re: Função Dinâmica, qual melhor forma de criar? (JotaComm) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Thu, 15 Jul 2010 09:25:22 -0300 > From: Ruy Carlos Nunes de Souza <[email protected]> > Subject: [pgbr-geral] Utilização do WITH em SELECT > To: "[email protected]" > <[email protected]> > Message-ID: > < > 187093016958424491049e42de24722b01093432b...@sac0991.ac.correiosnet.in > t> > > Content-Type: text/plain; charset="iso-8859-1" > > Bom dia, > > Estou com problema de utilização da cláusula WITH com SELECT. > Segundo manual poderia utiliza-lo da seguinte forma: > > > 7.8. WITH Queries > > WITH provides a way to write subqueries for use in a larger SELECT query. > The subqueries can be > > thought of as defining temporary tables that exist just for this > query. One use of this feature is to break > > down complicated queries into simpler parts. An example is: > > WITH regional_sales AS ( > > SELECT region, SUM(amount) AS total_sales > > FROM orders > > GROUP BY region > > ), top_regions AS ( > > SELECT region > > FROM regional_sales > > WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales) > > ) > > SELECT region, > > product, > > SUM(quantity) AS product_units, > > SUM(amount) AS product_sales > > FROM orders > > WHERE region IN (SELECT region FROM top_regions) > > GROUP BY region, product; > > Só que quando tento utilizar no pgAdmin um exemplo parecido, me é > apresentado o seguinte erro: > > ERROR: syntax error at or near "with" > SQL state: 42601 > > Alguém poderia ajudar? > > > > > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100 > 715/8732f34a/attachment-0001.htm > > ------------------------------ > > Message: 2 > Date: Thu, 15 Jul 2010 06:00:23 -0700 (PDT) > From: Angelo - Web Studio Brasil <[email protected]> > Subject: [pgbr-geral] Função Dinâmica, qual melhor forma de criar? > To: [email protected] > Message-ID: <[email protected]> > Content-Type: text/plain; charset="iso-8859-1" > > Amigos, bom dia, > > Estou em um impasse querendo saber dos mais experientes qual a melhor > forma de criar funções dinâmicas no PostgreSQL. > > Qual dos 2 cenários abaixo é o melhor em termos de performance, > lembrando que esta consulta é simples, mas o intuito da pergunta é > para funções mais complexas que analisam tabela com grandes > quantidades de registros fazendo joins entre > elas: > > 1 - Cenário: > Criar a consulta com vários JOINS e fazer um IF na função colocando os > respectivos WHERE de acordo com os parametros passados: > Ex: > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > character varying > ) > RETURNS SETOF public.f_teste AS > $BODY$ > DECLARE > var_row public.f_teste%ROWTYPE; > var_record RECORD; > var_strSQL VARCHAR; > BEGIN > var_strSQL := ' > SELECT > cliente.id, > cliente.nome > FROM cliente > join uf on uf.id = cliente.uf_id > WHERE 1 = 1 > '; > IF (p_id IS NOT NULL) THEN > var_strSQL := var_strSQL || ' AND cliente.id = ' || p_id; > END IF; > > IF (p_uf IS NOT NULL) THEN > var_strSQL := var_strSQL || ' AND uf.sigla = ''' || p_uf || ''''; > END IF; > > FOR var_record IN > EXECUTE var_strSQL > LOOP > var_row.id := var_record.id; > var_row.cliente_nome := var_record.nome; > RETURN NEXT var_row; > END LOOP; > > RETURN; > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > 2 - Cenário: > Criar a consulta com vários IF's colocando os respectivos JOIN e > WHEREs de acordo com os parametros passados: > Ex: > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > character varying > ) > RETURNS SETOF public.f_teste AS > $BODY$ > DECLARE > var_row public.f_teste%ROWTYPE; > var_record RECORD; > var_join VARCHAR; > var_where VARCHAR; > var_strSQL VARCHAR; > BEGIN > > IF (p_id IS NOT NULL) THEN > var_where := var_where || ' AND cliente.id = ' || p_id; > END IF; > > IF (p_uf IS NOT NULL) THEN > var_join := var_join || ' join uf on uf.id = cliente.uf_id '; > var_where := var_where || ' AND uf.sigla = ''' || p_uf || ''''; > END IF; > > var_strSQL := ' > SELECT > cliente.id, > cliente.nome > FROM cliente > ' || var_join || ' > WHERE 1 = 1 > ' || var_where; > > FOR var_record IN > EXECUTE var_strSQL > LOOP > var_row.id := var_record.id; > var_row.cliente_nome := var_record.nome; > RETURN NEXT var_row; > END LOOP; > > RETURN; > END; > $BODY$ > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > > > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100 > 715/fc579b63/attachment-0001.htm > > ------------------------------ > > Message: 3 > Date: Thu, 15 Jul 2010 10:15:02 -0300 > From: JotaComm <[email protected]> > Subject: Re: [pgbr-geral] Utilização do WITH em SELECT > To: Comunidade PostgreSQL Brasileira > <[email protected]> > Message-ID: > <[email protected]> > Content-Type: text/plain; charset="iso-8859-1" > > Olá, > > Em 15 de julho de 2010 09:25, Ruy Carlos Nunes de Souza < > [email protected]> escreveu: > > > Bom dia, > > > > Estou com problema de utilização da cláusula WITH com SELECT. > > Segundo manual poderia utiliza-lo da seguinte forma: > > > > Qual versão do PG? Este recurso está disponível apenas da versão 8.4. > > > > > > * > > > > 7.8. > > WITH Queries* > > > > WITH > > provides a way to write subqueries for use in a larger SELECT query. > > The subqueries can be > > > > thought of as defining temporary tables that exist just for this > > query. One use of this feature is to break > > > > down complicated queries into simpler parts. An example is: > > > > WITH regional_sales AS ( > > > > SELECT region, SUM(amount) AS total_sales > > > > FROM orders > > > > GROUP BY region > > > > ), top_regions AS ( > > > > SELECT region > > > > FROM regional_sales > > > > WHERE total_sales > > > (SELECT SUM(total_sales)/10 FROM regional_sales) > > > > ) > > > > SELECT region, > > > > product, > > > > SUM(quantity) AS product_units, > > > > SUM(amount) AS product_sales > > > > FROM orders > > > > WHERE region IN (SELECT region FROM top_regions) > > > > GROUP BY region, product; > > > > Só que quando tento utilizar no pgAdmin um exemplo parecido, me > > é apresentado o seguinte erro: > > > > ERROR: syntax error at or near "with" > > SQL state: 42601 > > > > Alguém poderia ajudar? > > > > > > > > > > > > _______________________________________________ > > pgbr-geral mailing list > > [email protected] > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > > > []s > -- > JotaComm > http://jotacomm.wordpress.com > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100 > 715/f11a9465/attachment-0001.htm > > ------------------------------ > > Message: 4 > Date: Thu, 15 Jul 2010 10:20:18 -0300 > From: JotaComm <[email protected]> > Subject: Re: [pgbr-geral] Função Dinâmica, qual melhor forma de criar? > To: Comunidade PostgreSQL Brasileira > <[email protected]> > Message-ID: > <[email protected]> > Content-Type: text/plain; charset="iso-8859-1" > > Olá, > > > Em 15 de julho de 2010 10:00, Angelo - Web Studio Brasil < > [email protected]> escreveu: > > > Amigos, bom dia, > > > > Estou em um impasse querendo saber dos mais experientes qual a > > melhor forma de criar funções dinâmicas no PostgreSQL. > > > > Eu trabalharia com outra questão. > > Na definição da função definir a função como: RETURNS NULL ON NULL > INPUT, assim sendo a função retorna diretamente NULL se algum dos > parâmetros for NULL. > > > > > Qual dos 2 cenários abaixo é o melhor em termos de performance, > > lembrando que esta consulta é simples, mas o intuito da pergunta é > > para funções mais complexas que analisam tabela com grandes > > quantidades de registros fazendo joins entre elas: > > > > 1 - Cenário: > > Criar a consulta com vários JOINS e fazer um IF na função colocando > > os respectivos WHERE de acordo com os parametros passados: > > Ex: > > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > > character varying ) > > RETURNS SETOF public.f_teste AS > > $BODY$ > > DECLARE > > var_row public.f_teste%ROWTYPE; > > var_record RECORD; > > var_strSQL VARCHAR; > > BEGIN > > var_strSQL := ' > > SELECT > > cliente.id, > > cliente.nome > > FROM cliente > > join uf on uf.id = cliente.uf_id > > WHERE 1 = 1 > > '; > > IF (p_id IS NOT NULL) THEN > > var_strSQL := var_strSQL || ' AND cliente.id = ' || p_id; > > END IF; > > > > IF (p_uf IS NOT NULL) THEN > > var_strSQL := var_strSQL || ' AND uf.sigla = ''' || p_uf || ''''; > > END IF; > > > > FOR var_record IN > > EXECUTE var_strSQL > > LOOP > > var_row.id := var_record.id; > > var_row.cliente_nome := var_record.nome; > > RETURN NEXT var_row; > > END LOOP; > > > > RETURN; > > END; > > $BODY$ > > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > > > > 2 - Cenário: > > Criar a consulta com vários IF's colocando os respectivos JOIN e > > WHEREs de acordo com os parametros passados: > > Ex: > > CREATE OR REPLACE FUNCTION public.f_teste( p_id integer, p_uf > > character varying ) > > RETURNS SETOF public.f_teste AS > > $BODY$ > > DECLARE > > var_row public.f_teste%ROWTYPE; > > var_record RECORD; > > var_join VARCHAR; > > var_where VARCHAR; > > var_strSQL VARCHAR; > > BEGIN > > > > IF (p_id IS NOT NULL) THEN > > var_where := var_where || ' AND cliente.id = ' || p_id; > > END IF; > > > > IF (p_uf IS NOT NULL) THEN > > var_join := var_join || ' join uf on uf.id = cliente.uf_id '; > > var_where := var_where || ' AND uf.sigla = ''' || p_uf || ''''; > > END IF; > > > > var_strSQL := ' > > SELECT > > cliente.id, > > cliente.nome > > FROM cliente > > ' || var_join || ' > > WHERE 1 = 1 > > ' || var_where; > > > > FOR var_record IN > > EXECUTE var_strSQL > > LOOP > > var_row.id := var_record.id; > > var_row.cliente_nome := var_record.nome; > > RETURN NEXT var_row; > > END LOOP; > > > > RETURN; > > END; > > $BODY$ > > LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER; > > > > > > > > _______________________________________________ > > pgbr-geral mailing list > > [email protected] > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > > > []s > -- > JotaComm > http://jotacomm.wordpress.com > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... > URL: > http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100 > 715/e4c9d03e/attachment.htm > > ------------------------------ > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > Fim da Digest pgbr-geral, volume 41, assunto 21 > *********************************************** > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > []s -- JotaComm http://jotacomm.wordpress.com -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://listas.postgresql.org.br/pipermail/pgbr-geral/attachments/20100715/4ba5c1f2/attachment.htm ------------------------------ _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Fim da Digest pgbr-geral, volume 41, assunto 22 *********************************************** _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
