定时任务

快速入门


定时任务设置

  1. 进入任务版块设置您的第一个定时任务
  2. 点击创建任务按钮或直接访问定时任务创建表单
  3. 为您的定时任务命名
  4. 通过输入cron语法(参考表单中的语法图表)或自然语言选择任务执行计划
  5. 输入SQL片段或选择数据库函数、HTTP请求或Supabase边缘函数

编辑任务

  1. 进入任务页面,找到您想要编辑的任务。
  2. 点击任务右侧的三个垂直点菜单,选择编辑定时任务
  3. 进行修改后点击保存定时任务

激活/停用任务

  1. 进入任务页面,找到您想要取消调度的任务。
  2. 切换任务名称旁边的激活/停用开关。

取消任务调度

  1. 进入任务页面,找到您想要删除的任务。
  2. 点击任务右侧的三个垂直点菜单,选择删除定时任务
  3. 输入任务名称确认删除。

检查任务运行情况

  1. 进入任务部分,找到您想查看运行记录的任务
  2. 点击任务名称旁边的历史记录按钮

示例

每周删除数据

每周六凌晨3:30(GMT时间)删除旧数据:

1
2
3
4
5
select cron.schedule ( 'saturday-cleanup', -- 定时任务名称 '30 3 * * 6', -- 每周六3:30AM(GMT时间) $$ delete from events where event_time < now() - interval '1 week' $$);

每日执行VACUUM

每天凌晨3:00(GMT时间)执行VACUUM:

1
select cron.schedule('nightly-vacuum', '0 3 * * *', 'VACUUM');

每5分钟调用数据库函数

创建一个hello_world()数据库函数,然后每5分钟调用一次:

1
select cron.schedule('call-db-function', '*/5 * * * *', 'SELECT hello_world()');

调用数据库存储过程

要使用存储过程,可以按如下方式调用:

1
select cron.schedule('call-db-procedure', '*/5 * * * *', 'CALL my_procedure()');

每30秒调用Supabase边缘函数

每30秒向Supabase边缘函数发起POST请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
select cron.schedule( 'invoke-function-every-half-minute', '30 seconds', $$ select net.http_post( url:='https://project-ref.supabase.co/functions/v1/function-name', headers:=jsonb_build_object('Content-Type','application/json', 'Authorization', 'Bearer ' || 'YOUR_ANON_KEY'), body:=jsonb_build_object('time', now() ), timeout_milliseconds:=5000 ) as request_id; $$ );

注意:系统维护任务调度

在设置系统维护任务的定时作业时要格外小心,因为它们可能会产生意外后果。

例如,使用pg_terminate_backend(pid)调度终止空闲连接的命令可能会中断关键的后台进程(如夜间备份)。通常,Postgres已有现成的设置(如idle_session_timeout)可以安全地执行这些常见维护任务。

如果您不确定是否适用于您的使用场景,请联系Supabase支持团队