Capítulo 24 de 54

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:

  1. Faz um SELECT no banco para pegar o nome.
  2. Faz um fetch (HTTP GET) na API da Stripe usando o customer_id.
  3. 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.