Acessando Tabelas Remotas no PostgreSQL com postgres_fdw
Caio Garcia
·2 minutos
Já precisou acessar dados que estão em outro banco PostgreSQL, mas não queria ter que replicar ou migrar tudo?
Situações como essa são comuns em integrações entre sistemas, microsserviços ou até em análises temporárias.
Felizmente, o PostgreSQL oferece uma solução robusta e nativa para isso: a extensão postgres_fdw.
Com ela, é possível consultar tabelas de um banco remoto como se estivessem no seu próprio banco local, de forma segura e eficiente.
1. No banco de dados remoto (onde os dados estão)
1.1. PostgreSQL anterior à versão 14
Crie um usuário apenas para leitura e conceda as permissões necessárias no schema desejado:
CREATE ROLE readonly_user WITH LOGIN PASSWORD 'secure_password'; GRANT SELECT ON ALL TABLES IN SCHEMA sample_schema TO readonly_user; -- permite leitura nas tabelas existentes. ALTER DEFAULT PRIVILEGES IN SCHEMA sample_schema -- garante que novas tabelas também fiquem acessíveis. GRANT SELECT ON TABLES TO readonly_user; GRANT USAGE ON SCHEMA sample_schema TO readonly_user;
1.2. PostgreSQL 14 ou superior
CREATE ROLE readonly_user LOGIN PASSWORD 'secure_password'; GRANT pg_read_all_data TO readonly_user; -- role interna para leitura total
2. No banco de dados local (onde você acessará os dados)
2.1. Ative a extensão postgres_fdw
CREATE EXTENSION postgres_fdw;
Permite usar bancos PostgreSQL externos como fontes de dados.
2.2. Registre o servidor remoto
CREATE SERVER external_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.0.100', port '5432', dbname 'external_database');
2.3. Mapeie seu usuário local ao usuário remoto
-- vincula o usuário local a um usuário remoto com senha. CREATE USER MAPPING FOR local_user SERVER external_server OPTIONS (user 'readonly_user', password 'secure_password');
2.4. Importe as tabelas desejadas
IMPORT FOREIGN SCHEMA sample_schema LIMIT TO (items, categories) FROM SERVER external_server INTO external_schema;
2.5. Permissões adicionais para outros usuários locais (se necessário)
GRANT USAGE ON FOREIGN SERVER external_server TO another_local_user;
Se outro usuário for usar esse servidor remoto, também será necessário criar um USER MAPPING para ele.
Com postgres_fdw, é possível consultar tabelas de outros bancos PostgreSQL de forma transparente e segura, sem replicação. Essa abordagem favorece integrações entre sistemas e centralização de consultas, reduzindo redundância e simplificando o acesso a dados distribuídos.