Re: [pgbr-geral] View com DB-Link

2011-11-17 Por tôpico Dickson S. Guedes
-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

2011-11-17 Por tôpico Vinicius Santos
>
> 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

2011-11-17 Por tôpico Flavio Henrique Araque Gurgel
>> 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

2011-11-17 Por tôpico Vinicius Santos
>
> 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

2011-11-17 Por tôpico Flavio Henrique Araque Gurgel
> 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

2011-11-17 Por tôpico Vinicius Santos
>
>
> 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

2011-11-17 Por tôpico Carlos Augusto Machado
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

2011-11-16 Por tôpico 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


Re: [pgbr-geral] View com DB-Link

2011-11-16 Por tôpico Osvaldo Kussama
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

2011-11-16 Por tôpico Vinicius Santos
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

2011-11-16 Por tôpico Vinicius Santos
>
> 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 Por tôpico Itamar Reis Peixoto
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

2011-11-16 Por tôpico Vinicius Santos
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

2011-11-16 Por tôpico Claudio Oliveira

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

2011-11-16 Por tôpico Daniel Cristian Cruz
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

2011-11-16 Por tôpico 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 ?
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral