(reconstruir os selects para fazer uso dos schemas),  acho que nao precisa 
sete a variavel search path a menos que tenham tabelas com nomes iguais no 
banco
----- Original Message ----- 
From: "Marcelo Magno" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, August 25, 2006 4:11 PM
Subject: [PostgreSQL-Brasil] RES: [postgresql-br] Views com dblink AGAIN


Ola pessoal, fiquei um tempo sem voltar nesse projeto e agora precisarei 
retomar o mesmo e acertar essas beiradas.

Segundo o amigo Steve sugeriu abaixo, fui procurar sobre schemas, mas me 
deparei com o problema da compatibilidade do codigo que eu já tenho rodando 
no momento. Se eu fisesse uso de varios schemas para apenas 1 banco, 
colocando 1 schema para cada um dos bancos antigos nesse novo banco, eu 
teria o problema de reescrever todo o código que existe nesses sistemas 
legados (reconstruir os selects para fazer uso dos schemas), e isso não é 
uma opcao pra mim. Existe alguma outra maneira usando schemas que eu não 
esteja vendo? Algo sem ter que reescrever os selects, inserts e afins...?

Outros 2 amigos, o Euler Taveira e o Flavio Brito, me pediram pra tentar 
exemplificar mais... Vou tentar faze-lo.

Hoje eu tenho 2 sistemas distintos, jah existentes em que foi necessario uma 
integracao.

Como eu fiz: eu fiz dentro de um banco algumas views usando o dblink, e 
apontado para a tabela no outro banco.

Exemplo da view:
CREATE OR REPLACE VIEW clientes AS
SELECT clientes.mneu_cli, clientes.nome_cli
  FROM dblink('dbname=sbd95_teste'::text, 'select * from clientes'::text) 
clientes(mneu_cli character varying(4), nome_cli character);

O grande problema eh que 2 dessas tabelas incluidas nas views tem uma 
quantidade grande de tuplas (cerca de 800 mil) e o processo de join de uma 
tabela do banco atual com a view do outro banco esta deveras demorado.

vou colocar um exemplo de uma query, e o seu explain... Pra voces terem uma 
ideia, as views com o dblink são: files e clientes, clientes eh pequena, 
cerca de mil tuplas, já a tabela files tem cerca de 55 mil tuplas.

SELECT *
FROM files  LEFT OUTER JOIN clientes ON clientes.mneu_cli = files.mneu_cli
LEFT OUTER JOIN recebimentoFiles  ON  files.file = Recebimentofiles.file
LEFT OUTER JOIN recebimento ON  Recebimento.pkRecebimento = 
recebimentoFiles.fkRecebimento
INNER JOIN empresa ON clientes.logo = empresa.logo
INNER JOIN empresa_conta ON empresa.pk_empresa = empresa_conta.fk_empresa

"Nested Loop  (cost=2375.11..31523.83 rows=252 width=4410)"
"  Join Filter: ("outer".logo = ("inner".logo)::numeric)"
"  ->  Nested Loop Left Join  (cost=2370.03..30257.54 rows=6306 width=4004)"
"        ->  Hash Left Join  (cost=2370.03..11175.59 rows=6306 width=3817)"
"              Hash Cond: (("outer".file)::text = ("inner".file)::text)"
"              ->  Hash Join  (cost=15.00..330.00 rows=5000 width=3721)"
"                    Hash Cond: (("outer".mneu_cli)::text = 
("inner".mneu_cli)::text)"
"                    ->  Function Scan on dblink clientes  (cost=0.00..12.50 
rows=1000 width=3027)"
"                    ->  Hash  (cost=12.50..12.50 rows=1000 width=694)"
"                          ->  Function Scan on dblink files 
(cost=0.00..12.50 rows=1000 width=694)"
"              ->  Hash  (cost=1646.62..1646.62 rows=40162 width=96)"
"                    ->  Seq Scan on recebimentofiles  (cost=0.00..1646.62 
rows=40162 width=96)"
"        ->  Index Scan using recebimento_pkrecebimento on recebimento 
(cost=0.00..3.01 rows=1 width=187)"
"              Index Cond: (recebimento.pkrecebimento = 
"outer".fkrecebimento)"
"  ->  Materialize  (cost=5.09..5.17 rows=8 width=406)"
"        ->  Hash Join  (cost=1.10..5.08 rows=8 width=406)"
"              Hash Cond: ("outer".fk_empresa = "inner".pk_empresa)"
"              ->  Seq Scan on empresa_conta  (cost=0.00..3.60 rows=60 
width=106)"
"              ->  Hash  (cost=1.08..1.08 rows=8 width=300)"
"                    ->  Seq Scan on empresa  (cost=0.00..1.08 rows=8 
width=300)"


Agradeço qualquer luz que voces possam me dar sobre esse problema de 
selecionar valores em um modelo cross table.

Desde já peço desculpas pelo email comprido.

Abracos
Marcelo Magno



-----Mensagem original-----
De: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED] Em nome de Steve Howe
Enviada em: quarta-feira, 9 de agosto de 2006 12:06
Para: [EMAIL PROTECTED]
Assunto: Re: [postgresql-br] Views com dblink

Hello Marcelo,

> Tenho 2 bancos distintos em um servidor posrgresql 8.1.4 em que me
> surgiu a necessidade de usar tabelas de um banco juntamente com
> tabelas do outro banco.
>
> Minha primeira ideia foi fazer views usando o dblink. Beleza, funciona.
> Mas como essas tabelas são extensas (muitas tuplas) e pela lentidão
> dada pelo join de uma tabela com uma views (no analyse esse eh o maior
> custo), eu estou tendendo a acreditar que ele não esteja nem ligando
> para os indices.
>
> Existe alguma alternativa diferente de atacar esse problema ? Existe
> alguma forma de fazer uso dos indices da tabela que esta no outro banco?
Tente incluir o segundo banco num novo schema dentro do primeiro banco.

--
Best Regards,
Steve Howe


--
Grupo PostgreSQL Brasil. Fundado em 1999.
Mensagens para: [EMAIL PROTECTED]
Historico: http://br.groups.yahoo.com/group/postgresql-br/messages
Moderadores: Ismael Amorim, Leonardo Cezar.

Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/postgresql-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html




_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a