Re: [pgbr-geral] View com DB-Link
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Em 2011/11/17 Flavio Henrique Araque Gurgel : >> Além da dica do nosso caro Osvaldo, fica outra: PostgreSQL 9.1 com >> FDW, esse problema do DB-Link vai embora, a consulta será um simples >> SELECT direto na tabela estrangeira. Em 17-11-2011 07:59, Carlos Augusto Machado escreveu: > Até onde sei o FDW também não repassa os filtros do WHERE. Busca todos > os dados da tabela e filtra localmente. Isto leva ao mesmo problema > que o Vinicius estava tendo com o DB-Link. Num FDW, você já possui os /quals/ (simplificando ao máximo /o que vem depois do WHERE/) na função definida em BeginForeignScan e com isso você pode ja impor uma heurística na consulta enviada para o servidor remoto e a retornar apenas os dados que você deseja. Se o FDW implementar esse filtro, "traduzindo" a clausula "WHERE" para a interface que o servidor entenda, então você já pode otimizar a consulta neste ponto. O "pulo do gato", até o momento, esta aí. O que ainda não tem é join-push-down, mas isso tá pertinho. ":) []s - -- Dickson S. Guedes mail/xmpp: gue...@guedesoft.net - skype: guediz http://guedesoft.net - http://www.postgresql.org.br http://github.net/guedes - twitter: @guediz -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJOxWFRAAoJEBa5zL7BI5C7CHAIAKfOqsuzaQB/jMrGRjIPjEyP xLHfNYMgUkKMmWLvrBAKs8NSaar8Rp2IY0t2TwoVcPjDSgrXfuyfFk5AcV6kYSoT ZOks3f9Ucidp/J4VpSoYaJFc2KdgJfVEH0VwNZGLLjeMnW3pH5Tvq2wc4/m5ufGc amZfTWNJ1khaCjnV8meTaXqWJAEOhFclWd6qCWMh3axIcHRuxRXV9LkcHPjhcXy5 b/hWquDsijJoMYcuNYsPnmma09BVRmgSUsu2KaEJMiQswmei9e8HfP2pWkPkcIFg /oa0CIc/F3RuFZ/h5O4JTg9r3fI3b9DLhjgEHv4WSR41SXsE3EzCC+Uzxy4B+Go= =gE5A -END PGP SIGNATURE- ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
> > Mas sua consulta funcionará perfeitamente, como se fosse uma consulta > local, o que não acontece com o dblink e similares, que são chamadas > de função. Claro, é um funcionalidade bem legal. Mas é possível fazer isto também com DB-LINK, basta criar uma visão, como eu fiz no exemplo. Desta maneira também fica transparente. Depois se for necessário fazer uma "visão materializada" é só utilizar RULES. Para a aplicação fica transparente. Com DB-LINK é mais trabalhoso, mas o resultado final é o mesmo, para versões < 9.1. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
>> Então FDW e PostgreSQL 9.1 são vantajosos pra você. > > Não cheguei a verificar o que o colega Carlos disse, mas se o FDW não > repassa a clausula WHERE, apenas mudamos a face do problema. Seu pedido foi "mais transparente". FDW é totalmente transparente para a aplicação. Uma consulta sobre uma tabela estrangeira usando FDW é exatamente igual à uma consulta a uma tabela local. Igualzinha. Quando falaram "não repassa a cláusula WHERE" isso não quer dizer que você não possa utilizá-la. A realidade é que, no momento, o PostgreSQL não repassa o plano de execução "para baixo", ou seja, consultas com muitos JOINS não serão otimizadas nos servidores estrangeiros de forma apropriada (ainda). Mas sua consulta funcionará perfeitamente, como se fosse uma consulta local, o que não acontece com o dblink e similares, que são chamadas de função. Esclareceu agora? []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
> > Então FDW e PostgreSQL 9.1 são vantajosos pra você. > Não cheguei a verificar o que o colega Carlos disse, mas se o FDW não repassa a clausula WHERE, apenas mudamos a face do problema. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
> Me expressei mal. Não seria dentro deste contexto. > Algo como uma tabela externa mesmo, mas que seja transparente. Talvez se o > DB-LINK fizesse parte do core, isso serial possível. > Algo +/- neste sentido. Então FDW e PostgreSQL 9.1 são vantajosos pra você. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
> > > Não alcancei o que você espera do dblink. > Você espera que a função leve em consideração informações fora do > escopo dos parâmetros que lhe são fornecidos? Me expressei mal. Não seria dentro deste contexto. Algo como uma tabela externa mesmo, mas que seja transparente. Talvez se o DB-LINK fizesse parte do core, isso serial possível. Algo +/- neste sentido. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
Até onde sei o FDW também não repassa os filtros do WHERE. Busca todos os dados da tabela e filtra localmente. Isto leva ao mesmo problema que o Vinicius estava tendo com o DB-Link. Att, Carlos Augusto Machado 2011/11/17 Flavio Henrique Araque Gurgel : >> Não alcancei o que você espera do dblink. >> Você espera que a função leve em consideração informações fora do >> escopo dos parâmetros que lhe são fornecidos? > > Além da dica do nosso caro Osvaldo, fica outra: PostgreSQL 9.1 com > FDW, esse problema do DB-Link vai embora, a consulta será um simples > SELECT direto na tabela estrangeira. > > []s > Flavio Gurgel > ___ > 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] View com DB-Link
> Não alcancei o que você espera do dblink. > Você espera que a função leve em consideração informações fora do > escopo dos parâmetros que lhe são fornecidos? Além da dica do nosso caro Osvaldo, fica outra: PostgreSQL 9.1 com FDW, esse problema do DB-Link vai embora, a consulta será um simples SELECT direto na tabela estrangeira. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
Em 16/11/11, Vinicius Santos escreveu: > Pessoal, após pensar um pouco, consegui resolver o problema. > > Com este select: > > CREATE OR REPLACE VIEW consulta_atual AS > SELECT > substring( current_query FROM position( 'where' IN current_query ) FOR > LENGTH( current_query ) ) AS clausula > FROM > pg_stat_activity > WHERE > procpid = pg_backend_pid(); > > Este select me traz a clausula WHERE atual. Então posso concatenar na > string que é passada ao DB-LINK. > > Meio "gambiarristico", mas resolveu o problema. Acredito que o DB-LINK > poderia ler a cláusula WHERE antes de passar a string para o outro banco em > casos como este, mas isto é outra história. > Não alcancei o que você espera do dblink. Você espera que a função leve em consideração informações fora do escopo dos parâmetros que lhe são fornecidos? Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
Pessoal, após pensar um pouco, consegui resolver o problema. Com este select: CREATE OR REPLACE VIEW consulta_atual AS SELECT substring( current_query FROM position( 'where' IN current_query ) FOR LENGTH( current_query ) ) AS clausula FROM pg_stat_activity WHERE procpid = pg_backend_pid(); Este select me traz a clausula WHERE atual. Então posso concatenar na string que é passada ao DB-LINK. Meio "gambiarristico", mas resolveu o problema. Acredito que o DB-LINK poderia ler a cláusula WHERE antes de passar a string para o outro banco em casos como este, mas isto é outra história. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
> > não é melhor replicar esta tabela utilizando o bucardo ? > > vc terá uma melhor performance. Não estamos utilizando replicação. Por DB-LINK as coisas ficariam mais simples, mas se não tiver jeito após todos os neurônios tiverem pedido arrego, vamos ter que utilizar replicação sim. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
2011/11/16 Vinicius Santos : > Boa tarde pessoal, > > Estou com uma dúvida com uma funcionalidade que estou precisando muito. > > Tenho uma view +/- assim: > > CREATE OR REPLACE VIEW consultar_sao_paulo AS > SELECT produto, estoque FROM dblink('dbname=sao_paulo', 'SELECT produto, > estoque FROM estoque' ) > AS tabela( produto INTEGER, estoque NUMERIC ). > > Até aí tudo bem, então chamo esta view assim: SELECT * FROM > consultar_sao_paulo WHERE produto = 31587. > > O grande problema é que a cláuse WHERE não é passada para o DB-LINK, então > primeiro ele faz a seleção completa da tabela estoque no banco sao_paulo, e > depois o filtro. > > Não faço a menor idéia de como contornar isto, e isto é funcionalidade > crucial para nossa aplicação hoje. > > Se realmente não há ainda uma maneira de resolver, será que seria difícil um > patch para isto ? Alguém conhece as entranhas do fonte do DB-LINK, e sabe me > dizer se vale a pena correr atrás de um patch ? não é melhor replicar esta tabela utilizando o bucardo ? vc terá uma melhor performance. -- Itamar Reis Peixoto msn, google talk: ita...@ispbrasil.com.br +55 11 4063 5033 (FIXO SP) +55 34 9158 9329 (TIM) +55 34 8806 3989 (OI) +55 34 3221 8599 (FIXO MG) ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
Em 16 de novembro de 2011 15:29, Claudio Oliveira escreveu: > Olá, > > Pela view realmente não vai funcionar. > > Vc terá que fazer uma função > E ai Claudião !! Tudo blz ??? O problema é que não podemos utilizar função. Estamos mexendo na tela de "Produtos por Localização". Não há como mudar a aplicação, queremos que fique transparente. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] View com DB-Link
Olá, Pela view realmente não vai funcionar. Vc terá que fazer uma função create or replace function consulta_estoque(in pwhere text, out "Código Produto" integer, out "Estoque Atual" numeric) return setof record as $$declare r record; comando text;begin comando := 'SELECT produto, estoque FROM estoque ' || ' where' || pwhere; for r in SELECT produto, estoque FROM dblink('dbname=sao_paulo', comando) AS tabela( produto INTEGER, estoque NUMERIC ) loop "Código Produto" := r.produto;"Estoque Atual" := r.estoque; return next; end loop; return;end;$$ language plpgsql; Vlw. Claudio Oliveira http://www.msisolucoes.com.br Date: Wed, 16 Nov 2011 15:06:30 -0200 From: vinicius.santos.li...@gmail.com To: pgbr-geral@listas.postgresql.org.br Subject: [pgbr-geral] View com DB-Link Boa tarde pessoal, Estou com uma dúvida com uma funcionalidade que estou precisando muito. Tenho uma view +/- assim: CREATE OR REPLACE VIEW consultar_sao_paulo AS SELECT produto, estoque FROM dblink('dbname=sao_paulo', 'SELECT produto, estoque FROM estoque' ) AS tabela( produto INTEGER, estoque NUMERIC ). Até aí tudo bem, então chamo esta view assim: SELECT * FROM consultar_sao_paulo WHERE produto = 31587. O grande problema é que a cláuse WHERE não é passada para o DB-LINK, então primeiro ele faz a seleção completa da tabela estoque no banco sao_paulo, e depois o filtro. Não faço a menor idéia de como contornar isto, e isto é funcionalidade crucial para nossa aplicação hoje. Se realmente não há ainda uma maneira de resolver, será que seria difícil um patch para isto ? Alguém conhece as entranhas do fonte do DB-LINK, e sabe me dizer se vale a pena correr atrás de um patch ? ___ 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] View com DB-Link
Talvez seja chover no molhado, mas só para confirmar, não pode ser uma função chamada com SELECT produto, estoque FROM consultar_sao_paulo(31587); ? Em 16 de novembro de 2011 15:06, Vinicius Santos escreveu: > Boa tarde pessoal, > > Estou com uma dúvida com uma funcionalidade que estou precisando muito. > > Tenho uma view +/- assim: > > CREATE OR REPLACE VIEW consultar_sao_paulo AS > SELECT produto, estoque FROM dblink('dbname=sao_paulo', 'SELECT produto, > estoque FROM estoque' ) > AS tabela( produto INTEGER, estoque NUMERIC ). > > Até aí tudo bem, então chamo esta view assim: SELECT * FROM > consultar_sao_paulo WHERE produto = 31587. > > O grande problema é que a cláuse WHERE não é passada para o DB-LINK, então > primeiro ele faz a seleção completa da tabela estoque no banco sao_paulo, e > depois o filtro. > > Não faço a menor idéia de como contornar isto, e isto é funcionalidade > crucial para nossa aplicação hoje. > > Se realmente não há ainda uma maneira de resolver, será que seria difícil um > patch para isto ? Alguém conhece as entranhas do fonte do DB-LINK, e sabe me > dizer se vale a pena correr atrás de um patch ? > ___ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] View com DB-Link
Boa tarde pessoal, Estou com uma dúvida com uma funcionalidade que estou precisando muito. Tenho uma view +/- assim: CREATE OR REPLACE VIEW consultar_sao_paulo AS SELECT produto, estoque FROM dblink('dbname=sao_paulo', 'SELECT produto, estoque FROM estoque' ) AS tabela( produto INTEGER, estoque NUMERIC ). Até aí tudo bem, então chamo esta view assim: SELECT * FROM consultar_sao_paulo WHERE produto = 31587. O grande problema é que a cláuse WHERE não é passada para o DB-LINK, então primeiro ele faz a seleção completa da tabela estoque no banco sao_paulo, e depois o filtro. Não faço a menor idéia de como contornar isto, e isto é funcionalidade crucial para nossa aplicação hoje. Se realmente não há ainda uma maneira de resolver, será que seria difícil um patch para isto ? Alguém conhece as entranhas do fonte do DB-LINK, e sabe me dizer se vale a pena correr atrás de um patch ? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral