Como o Vercel lida com PostgreSQL e o que eu precisei ajustar
Vercel e PostgreSQL funcionam, mas tem alguns detalhes que aprendi na prática e que eu gostaria de ter lido antes.
O problema de conexões
Funções serverless abrem uma nova conexão com o banco a cada invocação. Com volume baixo isso não é problema. Com picos de tráfego você pode esgotar o pool de conexões do PostgreSQL rapidamente.
A solução padrão é usar um connection pooler. Eu uso o PgBouncer via Supabase, que é transparente para a aplicação: você aponta para o pooler em vez de direto no banco e ele gerencia as conexões.
Variáveis de ambiente no Vercel
O Vercel tem três ambientes: production, preview e development. Cada um pode ter variáveis diferentes. No começo eu não separei bem isso e o banco de desenvolvimento apontava para produção em alguns contextos.
Valeu configurar explicitamente cada variável por ambiente desde o início.
Migrations em produção
Rodar migrations no Vercel não é óbvio. Não existe um hook de deploy que rode migrations automaticamente de forma segura.
O que eu faço: rodo manualmente antes de fazer deploy quando tem migration. Funciona para um projeto solo. Para um time isso precisaria de uma solução mais robusta.
O que eu recomendaria
Vercel com PostgreSQL é uma boa combinação para projetos pequenos e médios. Só entre sabendo que conexões serverless exigem atenção e que algumas coisas que são automáticas em outras plataformas precisam de configuração explícita aqui.