Você Pode Realizar Consultas Entre Bancos de Dados
com PostgreSQL? Veja Como!
Se você está trabalhando com PostgreSQL, pode se perguntar se é possível realizar consultas entre bancos de dados
. Isso geralmente surge quando você precisa acessar ou manipular dados que estão divididos entre diferentes bancos de dados. Uma situação comum é quando dois bancos de dados compartilham dados, mas estão configurados separadamente — levando à pergunta: Você pode consultar um banco de dados a partir de outro no PostgreSQL?
O Desafio das Consultas Entre Bancos de Dados
Você pode encontrar uma mensagem de erro semelhante a esta ao tentar executar uma consulta entre bancos de dados:
databaseA=# select * from databaseB.public.someTableName;
ERROR: referências entre bancos de dados não estão implementadas: "databaseB.public.someTableName"
Este erro indica que o PostgreSQL não suporta nativamente referências diretas entre bancos de dados. Portanto, se seus dados estão armazenados em bancos de dados separados e você precisa realizar consultas entre eles, precisará de uma solução alternativa.
A Solução: Usando Wrappers de Dados Externos
Para realizar consultas entre bancos de dados no PostgreSQL, você pode utilizar o recurso de wrapper de dados externo, especificamente postgres_fdw
. Isso permite que você se conecte facilmente a tabelas em qualquer banco de dados PostgreSQL, seja local ou remoto.
Configurando postgres_fdw
-
Instale a Extensão: Certifique-se de que a extensão
postgres_fdw
está habilitada na sua instalação do PostgreSQL. Você pode criar a extensão com o seguinte comando:CREATE EXTENSION postgres_fdw;
-
Defina um Servidor Externo: Crie um servidor externo que se conecte ao banco de dados alvo:
CREATE SERVER foreign_server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_address', dbname 'databaseB', port '5432');
-
Crie um Mapeamento de Usuário: Você precisará criar um mapeamento para o usuário se conectar ao servidor externo:
CREATE USER MAPPING FOR local_user SERVER foreign_server_name OPTIONS (user 'remote_user', password 'remote_password');
-
Importe o Esquema Externo: Você pode importar o esquema externo que contém as tabelas que deseja acessar:
IMPORT FOREIGN SCHEMA public FROM SERVER foreign_server_name INTO local_schema;
-
Consulta a Tabela Remota: Agora você pode consultar as tabelas externas como se fossem tabelas locais regulares:
SELECT * FROM local_schema.some_table_name;
Para Versões Antigas do PostgreSQL
Se você está utilizando uma versão do PostgreSQL anterior a 9.3, o recurso de wrapper de dados externo não está disponível. No entanto, você pode utilizar a função dblink
, que permite conectar-se a outros bancos de dados PostgreSQL.
- Usando
dblink
: Você precisará instalar o pacotepostgresql-contrib
se ele não fizer parte da sua distribuição. Então, você pode executar uma consulta assim:SELECT * FROM dblink('dbname=databaseB user=remote_user password=remote_password', 'SELECT * FROM public.some_table_name') AS t(column1 type1, column2 type2, ...);
Nota: Sempre considere reestruturar seus bancos de dados, se possível. Usar
schemas
dentro do mesmo banco de dados, em vez de bancos de dados separados, pode melhorar muito a gestão e o acesso aos dados.
Conclusão
Embora o PostgreSQL não suporte nativamente consultas entre bancos de dados, o uso de wrappers de dados externos como postgres_fdw
oferece uma poderosa alternativa. Ao configurar as configurações necessárias, você pode acessar e manipular dados entre diferentes bancos de dados sem dificuldades.
Se você estiver usando uma versão mais antiga, lembre-se de que, embora dblink
seja uma opção, atualizar para as versões mais recentes do PostgreSQL pode proporcionar melhor funcionalidade e suporte.
Com as ferramentas e estratégias certas, acessar dados entre bancos de dados é mais fácil do que nunca. Boas consultas!