定时任务

快速入门


安排作业#

  1. 前往 作业 部分来安排您的第一个作业。
  2. 点击 创建作业 按钮或导航到新的 Cron 作业表单 这里
  3. 命名您的 Cron 作业。
  4. 通过输入 cron 语法(参考表单中的语法图表)或自然语言来选择作业的计划。
  5. 输入 SQL 代码片段或选择数据库函数、HTTP 请求或 Supabase Edge 函数。

编辑作业#

  1. 前往 作业 部分并找到您想要编辑的作业。
  2. 点击作业右侧的三个垂直点菜单,然后点击 编辑 cron 作业
  3. 进行更改,然后点击 保存 cron 作业

激活/停用作业#

  1. 前往 作业 部分并找到您想要取消计划的作业。
  2. 切换作业名称旁边的 活动/非活动 开关。

取消安排作业#

  1. 前往 作业 部分并找到您想要删除的作业。
  2. 点击作业右侧的三个垂直点菜单,然后点击 删除 cron 作业
  3. 通过输入作业名称确认删除。

检查作业运行情况#

  1. 前往 作业 部分并找到您想要查看运行情况的作业。
  2. 点击作业名称旁边的 历史记录 按钮。

示例#

每周删除数据#

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

1
select cron.schedule (
2
'saturday-cleanup', -- name of the cron job
3
'30 3 * * 6', -- Saturday at 3:30AM (GMT)
4
$$ delete from events where event_time < now() - interval '1 week' $$
5
);

每天运行 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 Edge 函数#

每 30 秒向 Supabase Edge 函数发送 POST 请求

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

警告:安排系统维护#

在设置用于系统维护任务的作业时,请务必小心,因为它们可能会产生意想不到的后果。

例如,安排一个命令来终止空闲连接,使用 pg_terminate_backend(pid) 可能会破坏关键后台进程,例如夜间备份。通常,存在一个 Postgres 设置,例如 idle_session_timeout,可以在不冒风险的情况下执行这些常见的维护任务。

如果您不确定是否适用于您的用例,请联系 Supabase 支持