Database Cron (pg_cron): Agendamento Perfeito de Tarefas no SQL
No final do mês, você precisa rodar uma tarefa que analisa 50.000 clientes no banco e altera o status deles de ativo para vencido dependendo do histórico de pagamentos.
O erro de principiante é configurar uma Vercel Edge Function agendada (Cron Job) que puxa 50.000 registros para a memória da Vercel, processa um por um e devolve 50.000 chamadas de UPDATE pela internet para o banco.
Resultado: Timeout e banco lento.
O Padrão Arquitetural B2B exige que a manutenção massiva dos dados seja executada por quem mais domina dados: o próprio banco, utilizando a extensão pg_cron.
1. O que é o pg_cron?
É uma extensão C de alta velocidade rodando dentro da engine do Postgres. Ele permite agendar tarefas usando a mesma sintaxe do Cron do Linux (ex: 0 3 * * * para rodar às 3h da manhã todos os dias).
Por estar dentro da nuvem do Supabase, o pg_cron executa SQL cru sem transitar um único byte pela internet externa, eliminando a dependência do servidor web e de proxies HTTP.
2. Padrões de Uso (Casos de Sucesso)
Sempre substitua Crons tradicionais pelo pg_cron em cenários que envolvem mutação maciça de tabelas e que não exijam chamadas para APIs externas.
Exemplo de Limpeza (Soft Deletes / Logs)
-- Ativa a extensão (se ainda não estiver ativa)
CREATE EXTENSION IF NOT EXISTS pg_cron;
-- Agenda a remoção de carrinhos de compra abandonados há mais de 30 dias (Roda todo domingo à meia-noite)
SELECT cron.schedule(
'limpeza-carrinhos-abandonados',
'0 0 * * 0',
$$ DELETE FROM shopping_carts WHERE updated_at < now() - interval '30 days' $$
);
Exemplo Híbrido (Agendando Webhooks via pg_net)
E se a rotina mensal precisar notificar um sistema de faturamento externo?
A beleza do Supabase é a interoperabilidade das extensões. Você pode usar o pg_cron para agendar uma varredura nas tabelas e, em seguida, usar a extensão pg_net (Postgres Networking) para disparar Webhooks Assíncronos a partir do próprio banco.
3. Os Limites da Extensão
O pg_cron é incrivelmente eficiente, mas há duas regras de ouro:
- Nunca use para envio massivo de e-mails diretos. O banco deve lidar com dados. Para e-mails ou processamento pesado de vídeos, use o
pg_cronapenas para enfileirar as tarefas numa tabela, e faça uma Edge Function ou um sistema NestJS Worker externalizado consumir essa fila. - Audite seus Logs de Cron. O Supabase disponibiliza a visualização das tarefas agendadas. Comandos pesados devem rodar de madrugada para evitar disputa por CPU (Locks) com transações ativas de usuários do sistema.
[!TIP] Se o objetivo for manipular ou limpar estritamente dados no banco (sem depender de APIs externas para validação lógica), o pg_cron elimina todo o custo de tráfego (egress) da Vercel e garante a execução confiável, à prova de Timeouts, com custo zero na fatura do Serverless.
Precisa de apoio técnico para a sua empresa?
Se a sua operação busca especialistas para modernização de sistemas legados ou desenvolvimento de sistemas sob medida com arquitetura de alta performance (Next.js e Supabase), conheça meus serviços de tecnologia ou fale diretamente comigo pelo WhatsApp.