Quando usar RPC (Postgres Functions) vs Edge Functions no Supabase
No ecossistema do Supabase, você tem duas formas principais de executar lógica de backend no servidor: RPCs (Remote Procedure Calls), que são funções diretas no PostgreSQL (escritas em PL/pgSQL), e Edge Functions, que são funções Serverless executadas em Deno/TypeScript.
Uma das armadilhas mais comuns ao projetar sistemas escaláveis é colocar lógica no lugar errado. Este manual define o nosso padrão arquitetural sobre o uso de ambas as tecnologias.
❌ Quando NÃO usar RPCs (O Padrão para Regras de Negócio)
As melhores práticas ensinam que RPCs NÃO devem ser usados para regras de negócio genéricas, integrações ou fluxos lógicos complexos.
Os Contras do RPC em Lógica de Negócio:
- Developer Experience (DX) Pobre: Escrever lógica condicional e loops em PL/pgSQL é muito mais demorado, difícil de dar manutenção e suscetível a bugs do que escrever em TypeScript.
- Isolamento de Ecossistema: O PostgreSQL não possui NPM. Se a sua regra de negócio precisar consumir a API da Stripe para um pagamento, se conectar com o SendGrid para disparar um e-mail ou lidar com APIs de IA, usar SQL para isso torna-se uma gambiarra difícil de manter.
- Complexidade de Testes: Rodar TDD (Test Driven Development) ou testes unitários para o núcleo do seu banco de dados é burocrático.
A Alternativa Oficial: Edge Functions (TypeScript)
Toda lógica pesada que envolve regras de negócios, disparo de e-mails, processamento de webhooks e comunicação com APIs de terceiros deve ser obrigatoriamente escrita em Supabase Edge Functions usando TypeScript. Isso garante testes ágeis (Vitest), acesso a todo o ecossistema NPM/Deno e segurança.
✅ Quando USAR RPCs no Supabase
Você deve usar RPCs (Postgres Functions) de forma cirúrgica, estritamente para cenários onde a manipulação de dados é tão grande que transferi-los para uma Edge Function causaria um gargalo de rede ou memória.
Os únicos casos de uso validados para RPC na nossa stack são:
- Agregações Analíticas Complexas: Você precisa somar, agrupar e calcular métricas financeiras sobre 10 milhões de linhas de faturamento e devolver apenas 1 objeto JSON com o total consolidado (Ex: relatórios pesados de BI ou painéis administrativos).
- Busca Vetorial (IA): Executar operações matemáticas nativas de cosseno no
pgvectorpara Busca Semântica entre dezenas de milhares de registros. - Bulk Updates Críticos: Atualizar simultaneamente dezenas de milhares de registros na mesma transação atômica (tudo ou nada), sem fazer chamadas sucessivas pela rede.
O Resumo da Ópera (O Padrão Arquitetural)
Para manter a sanidade, a segurança e a escala do seu projeto SaaS:
- Segurança de Leitura/Gravação: Vai no banco, usando RLS (Row Level Security).
- Lógica de Negócios e Integrações Externas: Vai para o Edge, usando Supabase Edge Functions (Deno/TypeScript).
- Filtros Complexos e Cálculos Maciços em Lote: Vai para o banco de dados, usando funções RPC (PL/pgSQL).