pg_cron

Posted by stq on September 21, 2023

修改PostgreSQL配置文件postgresql.conf允许PostgreSQL加载pg_cron扩展:

shared_preload_libraries = 'pg_cron'

重新启动PostgreSQL以使配置更改生效

创建pg_cron扩展:

CREATE EXTENSION pg_cron;

使用sql创建定时任务:

--在每天凌晨3点运行一次SQL命令,删除my_table表中7天前的数据
SELECT cron.schedule('0 3 * * *', 'DELETE FROM my_table WHERE created_at < NOW() - interval ''7 days''');

现在postgres数据库中应该有cron模式,其中包含pg_cron.job表和pg_cron.job_run_details表:

pg_cron.job表:

这个表存储了定期任务的定义和相关信息。每个定期任务都在这个表中有一行记录,以下是一些重要的列和它们的描述:

jobid:任务的唯一标识符。
schedule:定义任务运行计划的cron表达式。它决定了任务在何时执行。
command:要运行的SQL命令或PL/pgSQL函数。
nodename:任务运行的节点名称,通常是PostgreSQL实例的名称。
database:任务要在哪个数据库中运行。
user:运行任务的数据库用户。
active:标志任务是否处于活动状态。如果设置为false,任务将不会执行。
next_run_at:下一次任务运行的时间戳。
last_run_at:任务上一次运行的时间戳。
last_run_duration:上一次运行的持续时间(以毫秒为单位)。
create_job:任务创建的时间戳。
你可以查询pg_cron.job表来查看当前定义的所有定期任务,以及它们的执行计划和状态。

pg_cron.job_run_details表:

这个表用于存储每个定期任务的运行详情信息,包括每次任务运行的开始时间、结束时间和持续时间等。以下是一些重要的列和它们的描述:

jobid:任务的唯一标识符,与pg_cron.job表中的jobid相关联。
job_name:任务的名称,与pg_cron.job表中的jobid相关联。
job_scheduled_at:任务计划运行的时间戳。
job_started_at:任务实际开始运行的时间戳。
job_ended_at:任务运行结束的时间戳。
job_duration:任务的运行持续时间(以毫秒为单位)。
status:任务运行的状态,可以是"completed"(已完成)或"failed"(失败)。
这个表用于跟踪每个任务的执行历史,以便你可以查看任务的运行情况和性能。

通过查询这两个表,你可以了解定期任务的定义、计划以及它们的历史运行情况。这对于监控和管理数据库中的定期任务非常有用,以及查找潜在的问题或优化执行计划。