Orchestrates long-running Edge Function work via waitUntil, pg_cron, and pgmq patterns.
97
97%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Orchestrates long-running Edge Function work via waitUntil, pg_cron, and pgmq patterns.
This tile provides two patterns for background processing in Supabase Edge Functions. Light tasks use EdgeRuntime.waitUntil(promise) to fire-and-forget while returning an immediate 200 OK. Massive async workloads are decomposed into pgmq messages, discovered by pg_cron jobs, and processed outside the Edge Function request lifecycle.
Deno.serve(async (req) => {
const payload = await req.json();
EdgeRuntime.waitUntil(doBackgroundWork(payload));
return new Response(JSON.stringify({ status: "accepted" }), { status: 200 });
});-- Create queue
SELECT pgmq.create('my_tasks');
-- Send message
SELECT pgmq.send('my_tasks', '{"action":"process","id":123}'::jsonb);
-- Cron job to consume (every 30 seconds)
SELECT cron.schedule('consume-my-tasks', '30 seconds',
$$SELECT pgmq.delete('my_tasks', msg_id)
FROM pgmq.read('my_tasks', 30, 5) WHERE processed = true$$
);| Workload | Pattern | Example |
|---|---|---|
| < 30s, single call | waitUntil | Webhook relay, email send |
| Batch, fan-out, pipeline | pg_cron + pgmq | Report generation, bulk import |