Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

PostgreSQL - Múltiplos Bancos realizando select entre eles

Boa tarde !

Tenho a seguinte dúvida: consigo ter no PostgreSQL a seguinte estrutura:

Servidor A:
                Banco: 1 
                        - Tabela ABC
                        - Tabela XYZ
                Banco: 2
                        - Tabela 123LMN
                        - Tabela 456OPQ

Consigo, estando com o Banco 1 aberto (use) executar um select * from na Tabela 123LMN que está no Banco 2 ? Se sim, como é feito e se não, o que é possível para conseguir fazer algo parecido no PostgreSQL ?

Outra dúvida, caso a resposta para a dúvida acima seja afirmativa, além de executar o select, consigo: estando no Banco 1 executar um select com join entre a Tabela ABC do Banco 1 com a Tabela 123LMN do Banco 2 ? Se sim, como é feito e se não existe algo que possa contornar essa necessidade, fazendo de outra forma no PostgreSQL ?

Agradeço pela atenção antecipadamente.

2 respostas
solução!

Oi, Sidney! Tudo certo por aí?

A resposta é sim para suas duas perguntas. No entanto, tais procedimentos dependem do módulo DBLink do PostgreSQL e são pouco utilizados. Na maioria das vezes, recomenda-se a utilização de schemas, muito mais comuns e práticos para pessoas que trabalham com o PostgreSQL!

Ao invés de lidarmos com distintos bancos de dados, podemos, por outro lado, trabalhar com schemas, que são entendidos como um conjunto de regras que define a organização, a estrutura e como será a manipulação do banco de dados. Dentro de um schema, teremos tabelas, índices, chaves primárias e estrangeiras, views, funções etc.

Portanto, eles são muito úteis para a organização e para a melhora da gestão dos itens que fazem parte do nosso banco de dados.

Um banco de dados pode ter mais de um schema. Além disso, é possível usar suas tabelas a qualquer momento, bem como uni-las a partir de um JOIN.

Abaixo, seguem as etapas iniciais para criação de schemas:

1 - Criar ou acessar um banco de dados de um servidor do pgAdmin;

2 - Abrir uma nova Query Tool;

3 - Criar um schema:

CREATE SCHEMA nome_do_schema;

Sabendo disso, podemos partir para a conversa sobre tabelas!

Durante a criação das nossas tabelas, precisamos explicitar em qual schema ela estará, desta forma:

CREATE TABLE nome_do_schema.nome_da_tabela (
    # restante do código vem aqui!
);

Observe que, antes de indicarmos o nome da tabela, digitamos o nome do nosso schema e colocamos um ponto — caso não seja adicionado o schema, o pgAdmin irá criar a tabela em um schema padrão.

Da mesma forma, quando quisermos realizar um SELECT de uma das tabelas, precisamos indicar seu schema:

SELECT * FROM nome_do_schema.nome_da_tabela;

Por fim, a lógica seguirá a mesma para a junção das tabelas. Para uma melhor compreensão, observe o exemplo abaixo:

SELECT * FROM schema_1.tabela_1
JOIN schema_2.tabela_2
ON schema_2.tabela_2.id_1 = schema_1.tabela_1.id_1

Neste caso, temos dois schemas: schema_1 e schema_2. O primeiro possui a tabela_1 (com a chave primária id_1) e o segundo schema possui a tabela_2, que tem id_1 como chave estrangeira.

Indicando corretamente os schemas, campos e tabelas, é possível utilizar o JOIN neste cenário.

Sidney, todos os scripts SQL acima foram feitos na mesma Query Tool e no mesmo banco de dados. Logo, não precisa se preocupar com esses itens!

Espero ter ajudado. Caso surja alguma dúvida após minha explicação ou durante os seus estudos, fico à disposição!

Um forte abraço, Sidney!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Boa tarde Andrieli !

Agradeço demais pela empatia para com a minha dúvida, entendi perfeitamente suas explicações e sou muito grato.

Abs.

Sidney.