Foreign Data Wrappers (FDW): APIs como Tabelas SQL Nativas
Quando você precisa montar um Dashboard que mostre o Nome do Cliente (banco local) e as Faturas Recentes do Cliente (Stripe API), o desenvolvedor comum criaria uma rota no Next.js que:
- Faz um
SELECTno banco para pegar o nome. - Faz um
fetch(HTTP GET) na API da Stripe usando ocustomer_id. - Faz um loop no Node.js (JavaScript) para mesclar (Join) esses dois arrays.
Isso é lento, doloroso de testar e consome memória do servidor de aplicação. O Postgres resolveu isso há anos através dos Foreign Data Wrappers (FDW).
1. O que são os Foreign Data Wrappers?
Os FDWs são extensões do Postgres que permitem conectar o seu banco a outras bases de dados (ou APIs) no mundo real.
No Supabase, você pode ativar o Wrapper (ex: stripe_fdw ou postgres_fdw) e criar uma "Tabela Virtual". Quando você executa um simples SELECT * FROM stripe_invoices, o próprio Postgres faz a chamada HTTP para a Stripe nos bastidores, formata o JSON recebido em colunas e linhas, e te entrega os dados prontos.
2. A Mágica do SQL (JOINs Intergalácticos)
A verdadeira revolução do FDW é que você pode tratar sistemas completamente diferentes como se fossem tabelas da mesma máquina, usando linguagem SQL.
Imagine cruzar os dados dos seus usuários locais com o Stripe em uma única Query:
SELECT
u.name,
u.email,
s.amount_due,
s.status
FROM public.users u
JOIN stripe.invoices s
ON u.stripe_customer_id = s.customer
WHERE s.status = 'open';
Zero código TypeScript. Zero loops locais. O Postgres cuida da latência de rede e da filtragem.
3. Quando utilizar FDW no Supabase?
Nossa arquitetura prioriza FDWs em cenários de leitura analítica pesada e painéis de controle.
Casos Ideais:
- Consolidar logs do Vercel e dados analíticos do BigQuery (
bigquery_fdw). - Ler catálogos de produtos de outro banco PostgreSQL de um ERP legado (
postgres_fdw). - Acessar faturas, planos e assinaturas diretamente da Stripe (
stripe_fdw). - Pesquisar objetos num bucket S3 (
s3_fdw).
[!WARNING] FDWs são incríveis para
SELECT, mas cuidado com a gravação de dados (INSERT/UPDATE). Mutações em APIs externas ainda são melhor gerenciadas através de Supabase Edge Functions, onde você pode tratar erros HTTP complexos (Retry, Fallback) de forma muito mais elegante e observável do que dentro de um Trigger do banco tentando gravar remotamente via FDW.