O recurso de Foreign Data Wrapper (FDW) do PostgreSQL permite que uma instância de banco de dados acesse tabelas residentes em outros servidores como se fossem tabelas locais. Esta funcionalidade é essencial para arquiteturas de microserviços, consolidação de relatórios e movimentação de dados entre ambientes.
1. Configuarção do Ambiente Local
Antes de iniciar a conexão, é recomendável criar um namespace dedicado para organizar os objetos que virão da fonte externa.
-- Criação de um schema isolado para os dados externos
CREATE SCHEMA IF NOT EXISTS integracao_remota;
2. Habilitação da Extensão
Para utilizar o driver de conexão entre instâncias PostgreSQL, a extensão postgres_fdw deve estar instalada na base de dados de origem (a que receberá os dados).
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
3. Definição do Servidor Estrangeiro
Nesta etapa, definimos os metadados de conexão com o servidor remoto. Note que as credenciais ainda não são inseridas aqui, apenas o endereço e o banco de dados.
CREATE SERVER IF NOT EXISTS srv_externo_prod
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (
host '192.168.1.50',
port '5432',
dbname 'db_producao'
);
4. Mapeamento de Credenciais
É necessário vincular um usuário do banco de dados local a um usuário existente no banco de dados remoto para autenticação.
-- Mapeia o usuário logado atualmente para um usuário do servidor remoto
CREATE USER MAPPING IF NOT EXISTS FOR CURRENT_USER
SERVER srv_externo_prod
OPTIONS (
user 'usr_leitura',
password 'senha_segura_123'
);
5. Importação de Tabelas
Ao invés de criar manualmente cada tabela externa, o PostgreSQL permite importar a estrutura de um schema inteiro ou selecionar tabelas específicas.
Importação seletiva
-- Importa apenas as tabelas de vendas e clientes
IMPORT FOREIGN SCHEMA public
LIMIT TO (vendas, clientes)
FROM SERVER srv_externo_prod
INTO integracao_remota;
Importação com exclusão
-- Importa tudo, exceto tabelas de logs volumosos
IMPORT FOREIGN SCHEMA public
EXCEPT (logs_sistema, rastreamento_audit)
FROM SERVER srv_externo_prod
INTO integracao_remota;
6. Consulta e Validação
Uma vez importadas, as tabelas podem ser consultadas normalmente via SQL.
-- Consulta teste com limite de registros
SELECT * FROM integracao_remota.vendas ORDER BY data_venda DESC LIMIT 5;
Monitoramento e Auditoria de FDW
Para gerenciar a infraestrutura de tabelas externas, você pode utilizar as visões de sistema do PostgreSQL.
Listar Servidores Externos Configurados
SELECT
srvname AS nome_servidor,
srvtype AS tipo,
srvoptions AS configuracoes
FROM pg_foreign_server;
Verificar Mapeamentos de Usuários
SELECT
s.srvname AS servidor,
u.rolname AS usuario_local,
um.umoptions AS detalhes_mapeamento
FROM pg_user_mapping um
JOIN pg_foreign_server s ON s.oid = um.umserver
JOIN pg_authid u ON u.oid = um.umuser;
Listar Todas as Tabelas Externas
SELECT
foreign_table_schema AS schema,
foreign_table_name AS tabela,
foreign_server_name AS servidor
FROM information_schema.foreign_tables;
Teste de Conectividade e Resiliência
O FDW não mantém uma conexão persistente aberta o tempo todo. A conexão é estabelecida no momento da execução da query. Para testar a saúde do link sem onerar o sistema, utilize um timeout curto:
BEGIN;
SET LOCAL statement_timeout = '3s';
SELECT 1 FROM integracao_remota.clientes LIMIT 1;
COMMIT;
Caso o servidor remoto sofra um reinício, o PostgreSQL local tentará retsabelecer o handshake na próxima requisição, sem necessidade de reconfigurar os objetos FDW.
Manutenção de Objetos
Para remover as configurações criadas:
-- Remove uma tabela específica
DROP FOREIGN TABLE IF EXISTS integracao_remota.vendas;
-- Remove o servidor e todos os mapeamentos/tabelas dependentes
DROP SERVER IF EXISTS srv_externo_prod CASCADE;