Implementando postgres_fdw no PostgreSQL
Introdução
O postgres_fdw (Foreign Data Wrapper) é uma extensão oficial do PostgreSQL que permite acessar e manipular dados armazenados em servidores PostgreSQL externos como se fossem tabelas locais. Esta extensão implementa o padrão SQL/MED (Management of External Data) e oferece uma maneira eficiente de integrar dados de múltiplos bancos de dados PostgreSQL sem a necessidade de replicação ou ETL complexo.
Níveis de Isolamento no PostgreSQL e o papel do postgres_fdw
No PostgreSQL, os bancos de dados dentro de um cluster são isolados uns dos outros por design. Este isolamento oferece segurança e separação lógica entre aplicações, mas também cria desafios quando é necessário acessar dados em diferentes bancos de dados:
- Isolamento por Design: Diferentemente de outros SGBDs, o PostgreSQL mantém cada banco de dados como uma entidade completamente separada. Não é possível executar consultas entre bancos de dados usando sintaxe como SELECT * FROM banco1.schema.tabela.
- Separação de Usuários e Permissões: Cada banco de dados possui seu próprio conjunto de usuários, roles e permissões, o que dificulta o acesso unificado.
- Schemas vs. Bancos de Dados: Enquanto schemas dentro de um banco de dados permitem organização lógica com acesso transparente, bancos de dados diferentes são completamente isolados.
O postgres_fdw surge como uma solução elegante para esse desafio, permitindo que os dados atravessem essa barreira de isolamento. Ele estabelece uma ponte entre bancos de dados não apenas no mesmo servidor, mas também entre diferentes instâncias de PostgreSQL em servidores distintos, mantendo a integridade do modelo de segurança e isolamento original.
Este wrapper permite que organizações implementem arquiteturas de microserviços com bancos de dados isolados, ao mesmo tempo em que mantém a capacidade de executar consultas integradas quando necessário. Isso é particularmente valioso em ambientes onde:
Diferentes equipes ou departamentos mantêm seus próprios bancos de dados
Requisitos de conformidade exigem separação física de dados
Existe a necessidade de integrar sistemas legados com novas aplicações
A escalabilidade horizontal é implementada através da fragmentação de bancos de dados
Este tutorial guiará você pelos passos necessários para configurar e utilizar o postgres_fdw em seu ambiente PostgreSQL, permitindo consultas transparentes entre diferentes instâncias do banco de dados.
Pré-requisitos
PostgreSQL 9.3 ou superior instalado (recomenda-se a versão mais recente)
Acesso administrativo aos bancos de dados de origem e destino
Conectividade de rede entre os servidores PostgreSQL
Credenciais de acesso para os bancos de dados remotos
Passos para Implementação
Passo 1: Instalar a extensão postgres_fdw
Primeiro, você precisa instalar a extensão no banco de dados onde deseja acessar as tabelas remotas:
— Conecte-se ao banco de dados local
— Crie a extensão
EXTENSION postgres_fdw;
Verifique se a extensão foi instalada corretamente:
Você deve ver postgres_fdw na lista de extensões instaladas.
Passo 2: Criar o servidor externo
Agora, crie um servidor externo que representa a instância remota do PostgreSQL:
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host ‘endereco_do_servidor_remoto’,
port ‘5432’,
dbname ‘banco_de_dados_remoto’);
Substitua: – servidor_remoto pelo nome que você deseja dar ao servidor – endereco_do_servidor_remoto pelo endereço IP ou hostname do servidor remoto – banco_de_dados_remoto pelo nome do banco de dados remoto que você deseja acessar
Passo 3: Criar mapeamento de usuário
Para autenticar no servidor remoto, você precisa criar um mapeamento de usuário:
SERVER servidor_remoto
OPTIONS (user ‘usuario_remoto’, password ‘senha_remota’);
Substitua: – usuario_local pelo usuário PostgreSQL local – usuario_remoto pelo usuário no servidor remoto – senha_remota pela senha do usuário remoto
Para maior segurança, você pode usar:
SERVER servidor_remoto
OPTIONS (user ‘usuario_remoto’, password ‘senha_remota’);
Passo 4: Criar esquema para tabelas externas (opcional)
Por organização, você pode criar um esquema específico para as tabelas externas:
Passo 5: Importar tabelas estrangeiras
Existem duas maneiras de importar tabelas remotas:
Opção 1: Importar manualmente
id integer NOT NULL,
nome varchar(100) NOT NULL,
email varchar(100),
data_cadastro date
)
SERVER servidor_remoto
OPTIONS (schema_name ‘public’, table_name ‘clientes’);
Opção 2: Importar automaticamente (recomendado)
LIMIT TO (clientes, pedidos)
FROM SERVER servidor_remoto
INTO dados_externos;
Para importar todas as tabelas de um esquema:
FROM SERVER servidor_remoto
INTO dados_externos;
Passo 6: Conceder permissões nas tabelas externas
GRANT SELECT, INSERT, UPDATE, DELETE ON dados_externos.clientes TO usuario_aplicacao;
Passo 7: Testar o acesso às tabelas externas
— Verificar tabelas externas disponíveis
— Executar uma consulta que une tabelas locais e remotas
FROM vendas l
JOIN dados_externos.clientes r ON l.id_cliente = r.id
LIMIT 10;
Passo 8: Ajustar configurações de desempenho (opcional)
Para melhorar o desempenho, você pode ajustar as opções do FDW:
— Alterar configurações de uma tabela estrangeira
OPTIONS (ADD use_remote_estimate ‘true’);
— Configurar busca em lotes
OPTIONS (ADD fetch_size ‘1000’);
Monitoramento e Manutenção
Verificar estatísticas de uso
— Verificar estatísticas de execução se estiver usando PostgreSQL 14+
WHERE relname = ‘clientes’;
Atualizar estrutura da tabela se mudanças ocorrerem no remoto
FROM SERVER servidor_remoto
INTO dados_externos
OPTIONS (import_default ‘true’);
Conclusão: Prós e Contras do postgres_fdw
Prós
- Integração Nativa: Implementado e mantido pela comunidade PostgreSQL, garantindo compatibilidade e suporte de longo prazo.
- Transparência: Permite acessar tabelas remotas como se fossem locais, com suporte completo para SQL incluindo JOINs complexos.
- Desempenho: Executa parte do processamento no servidor remoto, reduzindo a transferência de dados pela rede.
- Transações: Suporta transações distribuídas (a partir do PostgreSQL 11), mantendo a integridade dos dados.
- Segurança: Fornece controle de acesso granular e suporte para SSL para conexões seguras.
- Atualidade dos Dados: Sempre acessa os dados mais recentes, sem latência de replicação.
- Filtragem Eficiente: Envia condições WHERE e JOINs para o servidor remoto, minimizando a transferência de dados.
- Baixo Impacto de Armazenamento: Não duplica os dados, economizando espaço em disco.
Contras
- Dependência de Rede: Requer conectividade constante e estável; problemas de rede afetam diretamente o desempenho e a disponibilidade.
- Latência: Pode ser mais lento que acessar tabelas locais, especialmente com muitas consultas pequenas ou alta latência de rede.
- Recursos Limitados: Algumas funcionalidades avançadas do PostgreSQL podem não funcionar completamente com tabelas estrangeiras.
- Complexidade de Manutenção: Alterações nos esquemas remotos podem exigir atualizações manuais nas definições de tabelas estrangeiras.
- Dependência de Disponibilidade: Se o servidor remoto estiver indisponível, as tabelas estrangeiras ficam inacessíveis.
- Segurança de Credenciais: As senhas podem estar expostas nas definições de mapeamento de usuário se não forem gerenciadas adequadamente.
- Limitações em Índices: Não é possível criar índices locais em tabelas estrangeiras, limitando a otimização de consultas complexas.
- Administração Adicional: Requer configuração e monitoramento adicionais em comparação com soluções de replicação automática.
O postgres_fdw é uma solução excelente para federação de dados em ambientes PostgreSQL, especialmente quando você precisa de acesso em tempo real a dados dispersos sem duplicação. No entanto, para cenários com alta disponibilidade ou onde a latência de rede é uma preocupação, outras soluções como replicação lógica podem ser mais adequadas.
About author
Você pode gostar também
Domine o Wildfly 8: Curso com foco em Administração e DevOps
Administração com Cluster de Alta Performance em ambiente DevOps. Novidades do Curso além dos recursos novos do Wildfly No curso existe uma máquina DEVOPS (com ferramentas dev, como GIT, Maven)
Pane em sistema apaga 16.500 processos do TCE-AM: 4Linux é contratada para recuperação
O TCE-AM (Tribunal de Contas do Estado do Amazonas) teve 16.500 processos apagados indevidamente devido a uma pane nos sistemas e-Contas e Spede (Sistema de Processos e Documentos Eletrônicos) depois
Introdução ao PostgreSQL: Um Guia para Iniciantes
O PostgreSQL é um poderoso sistema de gerenciamento de banco de dados relacional (SGBD) de código aberto, amplamente reconhecido por sua confiabilidade, extensibilidade e recursos avançados. Seja você um desenvolvedor,







