Olá, José. Como vai?
Esse erro é bastante comum quando trabalhamos com Next.js, Prisma e ambientes Serverless como a Vercel. A mensagem Cannot use a pool after calling end on the pool indica que o seu código está tentando realizar uma consulta ao banco de dados usando uma conexão que já foi encerrada.
No modelo de Serverless Functions da Vercel, o ciclo de vida das conexões é diferente de um servidor tradicional. Aqui estão as principais causas e como você pode resolver:
1. Instância do Prisma Client
O problema mais frequente é a criação de múltiplas instâncias do PrismaClient toda vez que uma rota ou Server Action é chamada. No Next.js (especialmente em desenvolvimento e no deploy), você deve garantir que o Prisma seja um Singleton.
Verifique se o seu arquivo de configuração do Prisma (geralmente lib/prisma.ts) está seguindo este padrão:
import { PrismaClient } from '@prisma/client'
const prismaClientSingleton = () => {
return new PrismaClient()
}
declare global {
var prismaGlobal: undefined | ReturnType<typeof prismaClientSingleton>
}
const prisma = globalThis.prismaGlobal ?? prismaClientSingleton()
export default prisma
if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma
**2. Uso do comando prisma.$disconnect()**
Muitas vezes, por boa prática em scripts simples, usamos o $disconnect() ao final da execução. No entanto, em Server Actions ou API Routes, você não deve chamar o .end() ou .$disconnect() manualmente após cada operação. A Vercel gerencia o reuso das funções, e se você encerrar o "pool" de conexões, a próxima requisição que tentar usar a mesma instância falhará com exatamente esse erro que você postou.
3. Limite de Conexões (Connection Pooling)
Bancos de dados relacionais (PostgreSQL) têm um limite de conexões simultâneas. Se você não estiver usando um acelerador de consultas como o Prisma Accelerate ou um pooler de conexões como o PgBouncer (ou o Supabase Connection Pooler), a Vercel pode abrir tantas conexões que o banco acaba encerrando-as forçadamente.
Dica extra para Vercel:
Certifique-se de que a variável de ambiente DATABASE_URL no painel da Vercel está configurada corretamente. Se estiver usando Supabase ou Neon, prefira usar a URL que aponta para a porta do Transaction Mode (geralmente porta 6543 ou similar), que é otimizada para o modelo Serverless do Next.js.
Tente revisar o Singleton do Prisma e remover chamadas manuais de desconexão. Isso deve estabilizar o seu deploy.
Espero que possa ter lhe ajudado!