pg_cron是postgresql的一个扩展,是一个基于cron的作业调度程序,需要pg9.5及以上版本才可以安装。 它的用法和操作系统的cron基本一致,但是允许我们直接在postgresql数据库中执行sql语句。并且作为一个独立运行的工作者进程,其生命周期管理、内存空间都依赖于 postgreSQL 。 例如我们安装完该插件后,可以看到相关的进程:
下载地址: https://github.com/citusdata/pg_cron
编译安装:
cd pg_cron make make install配置参数: 因为pg_cron会启动一个新的进程,所以需要将其添加到shared_preload_libraries参数中。 同时我们还需要配置cron.database_name指定数据库。
shared_preload_libraries = 'pg_cron' cron.database_name = 'bill'另外我们还需要配置pg_hba.conf:
host all all localhost trust host all all 0.0.0.0/0 trust或者配置.pgpass文件也可以:
hostname:port:database:user:password然后重启数据库就可以安装该扩展了:
pg_ctl stop pg_ctl start CREATE EXTENSION pg_cron;我们先看下该扩展为我们提供了哪些函数:
bill=# \dx+ pg_cron Objects in extension "pg_cron" Object description -------------------------------------- function cron.job_cache_invalidate() function cron.schedule(text,text) function cron.unschedule(bigint) schema cron sequence cron.jobid_seq table cron.job (6 rows) cron.schedule:创建定时任务,其中第一个参数是执行频率,第二个参数是执行的任务。cron.unschedule:取消定时任务,参数为jobid。创建定时任务:
bill=# SELECT cron.schedule('0 10 * * *', 'VACUUM'); schedule ---------- 1 (1 row)查看定时任务:
bill=# select * from cron.job; jobid | schedule | command | nodename | nodeport | database | username | active -------+------------+---------+-----------+----------+----------+----------+-------- 1 | 0 10 * * * | VACUUM | localhost | 1921 | bill | bill | t (1 row)取消定时任务:
bill=# SELECT cron.unschedule(1); unschedule ------------ t (1 row)或者我们可以直接删除cron.job表中对应的记录也可以取消定时任务。
pg_cron 使用标准的 cron 语法,其中 * 表示“每个该时间运行”,特定数字表示“仅在 这个数字时 运行”
┌───────────── 分钟 (0 - 59) │ ┌────────────── 小时 (0 - 23) │ │ ┌─────────────── 日期 (1 - 31) │ │ │ ┌──────────────── 月份 (1 - 12) │ │ │ │ ┌───────────────── 一周中的某一天 (0 - 6) (0 到 6 表示周末到下周六, │ │ │ │ │ 7 仍然是周末) │ │ │ │ │ │ │ │ │ │ * * * * *