Adilson,
é simples também fazer join usando dblink.
Abaixo um exemplo:
select dw.nome_cfs, f.cfs, count(f.cfs) as tot
from fat20080923 f, (select * from dblink('dbname=dw_download_teste
hostaddr=10.0.0.0 user=postgres password=postgres port=5432',
'select cfs, nome
from dw_cfs') as (cfs varchar, nome_cfs varchar) ) as
dw
where f.csp = 'ACO13' and f.scv = '005' and f.siv = '00001' and f.eiv =
'00001'
and f.cfs = dw.cfs
group by dw.nome_cfs, f.cfs
order by dw.nome_cfs, f.cfs;
Você dá um alias/apelido a tabela local (aqui f) e ao join (aqui dw). Depois
pode seguir normalmente, com os joins. No dblink, você precisa especificar a
saída da query com o tipo (cada coluna do select).
[],
Guilherme
Guilherme Vianna de Aguiar
_________________________________________
Acotel do Brasil
Praia de Botafogo, 440, 20º Andar - Botafogo
Rio de Janeiro - Rio de Janeiro - Brasil
Phone ( (+55) 21 3523-6531
Mobile H (+55) 21 8157-9218
Fax 4 (+55) 21 3523-6565
E-mail - <mailto:[EMAIL PROTECTED]>
[EMAIL PROTECTED]
De: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Em nome de tetraetila®
Enviada em: quarta-feira, 24 de setembro de 2008 21:23
Para: Comunidade PostgreSQL Brasileira
Assunto: Re: [pgbr-geral] RES: Ajuda com SQL e BD
Ok! Guilherme, muito obrigado!
Mais o problema é integrar o DBLink dentro do meu select, onde ele faz
referência a tabela de outro BD seria intercalado o select do DBLink. Fazer
o DBLink sozinho eu sei, como montar o select completo é que não. Tipo:
select a017.a017_docu, a017.a017_tipo, ** DBLINK a014_desc **,
a017.a017_dtem,
a017.a017_tpfo, a017.a017_forn, ** DBLINK a001_nome **, a017.a017_hist,
a017.a017_dtvn, a017.a017_vavn, a017.a017_dtpg, a017.a017_vapg,
a017.a017_atra, a017.a017_cdbx, a017.a017_banc, ** DBLINK a016_desc **,
a017.a017_cheq, a017.a017_his1, a017.a017_digi, a017.a017_plan, **DBLINK
a011_desc **,
a017.a017_dupl, a017.a017_docu as ca017_docu, a017.a017_tipo as
ca017_tipo
from a001017_tbl a017
left outer join a001014_tbl on (a017.a017_tipo = a001014_tbl.a014_chv)
left outer join a001001_tbl on (a017.a017_tpfo = a001001_tbl.a001_tipo)
and (a017.a017_forn = a001001_tbl.a001_chv)
left outer join a001016_tbl on (a017.a017_banc = a001016_tbl.a016_chv)
left outer join a001011_tbl on (a017.a017_plan = a001011_tbl.a011_redu)
Adilson Nunes
----- Original Message -----
From: Guilherme Vianna de Aguiar <mailto:[EMAIL PROTECTED]>
To: 'Comunidade PostgreSQL Brasileira'
<mailto:[email protected]>
Sent: Wednesday, September 24, 2008 9:53 AM
Subject: [pgbr-geral] RES: Ajuda com SQL e BD
Para usar dblink, você precisa ter instaladas as funções.
A sintaxe eh
select *
from (_CONN_BANCO_REMOTO_, _SELECT_BANCO_REMOTO)
as t1 (_COL_BANCO_REMOTO_ tipo);
Um exemplo
select *
from dblink('dbname=teste hostaddr=10.0.0.0 user=postgres password=postgres
port=5432',
'select data
from dw_data
where substring(data::varchar, 1, 7) = ''2008-08'' ')
as t1(data varchar)
[],
Guilherme Vianna
De: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Em nome de tetraetila®
Enviada em: terça-feira, 23 de setembro de 2008 23:34
Para: [email protected]
Assunto: [pgbr-geral] Ajuda com SQL e BD
Estou precisando de uma ajuda, o Firebird não me serve. Preciso aprender a
fazer o DBLink no Postgres
para poder utilizar mais de um BD na minha aplicação. Qualquer ajuda será
bem vinda.
Veja a situação abaixo:
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-------------------------
Olá
Estou migrando um sistema para Firebird e me deparei com um problema que
gostaria de debater com vocês.
Tenho um BD que possui as tabelas com os dados de clientes, fornecedores,
transportadores e vendedores, além
das tabelas de tipos de documentos, plano de contas, bancos, etc. Seria a
base principal.
Quando estou na Empresa01 faço um "select" que me retorna o tipo de
documento na tabela A017 e a descrição do
documento que está na tabela A014, o tipo de fornecedor na tabela A017 e o
nome do fornecedor na tabela A001
e por aí vai, vendedores, transportadores, plano de contas, etc. A tabela
A017 é de movimentação de contas a pagar, porém no sistema
eu trabalho com as Empresas02, 03, "n"... As tabelas padrões são as mesmas,
eu mudo apenas os arquivos de movimentação
para outro BD. O problema é que eu não sei como fazer isto ou se é possível
fazê-lo no Firebird. Ou seja, dar um "select" que
busque dados em dois BD's distintos. Quando o banco de dados é o mesmo o
"select" abaixo funciona perfeitamente,
porém quando mudo para a Empresa02 não funciona, pois não sei buscar as
informações das tabelas A014 -
A001 - A016 - A011 que estão no BD001. Isto que necessito seria em Postgres,
um "DBLink", já andei pesquisando.
Se alguém tiver uma sugestão que possa me ajudar mesmo que seja fazer o
"DBLink" no Postgress, agradeço desde já.
Pois esta está sendo a "pedra no meu caminho" para terminar o sistema,
resolvendo isto vários problemas serão
solucionados de uma vez só. Estamos saindo do Clipper e DBF.
Muito obrigado!
Vejam o select que funciona quando o BD é único:
select a017.a017_docu, a017.a017_tipo, A014_DESC, a017.a017_dtem,
a017.a017_tpfo, a017.a017_forn, A001_NOME, a017.a017_hist,
a017.a017_dtvn, a017.a017_vavn, a017.a017_dtpg, a017.a017_vapg,
a017.a017_atra, a017.a017_cdbx, a017.a017_banc, A016_DESC,
a017.a017_cheq, a017.a017_his1, a017.a017_digi, a017.a017_plan, A011_DESC,
a017.a017_dupl, a017.a017_docu as ca017_docu, a017.a017_tipo as ca017_tipo
from a001017_tbl a017
left outer join a001014_tbl on (a017.a017_tipo = a001014_tbl.a014_chv)
left outer join a001001_tbl on (a017.a017_tpfo = a001001_tbl.a001_tipo)
and (a017.a017_forn = a001001_tbl.a001_chv)
left outer join a001016_tbl on (a017.a017_banc = a001016_tbl.a016_chv)
left outer join a001011_tbl on (a017.a017_plan = a001011_tbl.a011_redu)
O que retornaria mais ou menos conforme abaixo:
----------------------------------------------------------------------------
-----------------------------------------
A017_DOCU | A017_TIPO | A014_DESC | A017_DTEM | A017_TPFO | A017_FORN |
A001_NOME |
----------------------------------------------------------------------------
-----------------------------------------
52.521-U | 003 | Duplicatas |16/09/2008 | 001
| 000565 | Santa Maria S/A. |
----------------------------------------------------------------------------
------------------------------------------
36.878-A | 005 | Cheques |16/08/2008 | 001
| 000098 | Papelão & Cia. |
----------------------------------------------------------------------------
------------------------------------------
14.315-B | 001 | Pagamentos |16/09/2007 | 001
| 000001 | Pagamentos diversos |
----------------------------------------------------------------------------
------------------------------------------
Adilson Nunes
No virus found in this incoming message.
Checked by AVG - http://www.avg.com
Version: 8.0.169 / Virus Database: 270.7.1/1688 - Release Date: 24/9/2008
06:29
_____
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
No virus found in this incoming message.
Checked by AVG - http://www.avg.com
Version: 8.0.169 / Virus Database: 270.7.2/1690 - Release Date: 25/9/2008
07:05
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral