前言
pg_cron它作为扩展运行在数据库内部。它使用与常规cron相同的语法,但是它允许你直接从数据库调度PostgreSQL命令。pg_cron可以并行运行多个作业,但是一次最多只能运行一个作业实例。如果第二轮运行在第一轮运行完成之前开始,则第二轮运行将排队,并在第一轮运行完成后立即开始。这里有一个需要特别注意的点,pg_cron始终使用GMT时区!!如果你的数据库使用的是CST时区,定时任务的时间需要减去8小时。
安装
获取并编辑插件
https://github.com/citusdata/pg_cron/archive/v1.3.0.tar.gz
tar -xf xf v1.3.0.tar.gz
cd pg_cron-1.3.0
make
make install
修改配置文件
vim postgresql.conf
shared_preload_libraries= 'pg_stat_statements,pg_cron'
cron.database_name = 'postgres'
cron.use_background_workers = on
max_worker_processes = 16 //最大工作进程,因为该参数默认为8,另外它和数据库autovacuum进程有密切关联,一般生产需要根据服务器CPU去找一个最优的值。
max_connections=16000 //最大连接数,该参数根据自己实际生产进行调整,也可以不调整。
# 完成之后重启数据库
pg_ctl restart
创建pg_cron扩展
psql
# 创建扩展,需超级用户
CREATE EXTENSION pg_cron;
# 查看扩展
\dx
# 授权cron对象的使用权限
GRANT USAGE ON SCHEMA cron to postgres ;
常用定时任务
//新建定时任务
SELECT cron.schedule('30 6 * * *', 'VACUUM repack_test');
//查询定时任务
SELECT * FROM cron.job;
//删除定时任务
SELECT cron.unschedule(1);
//查询定时任务
SELECT * FROM cron.job;
//关于pg_cron插件的表信息
\dtS+ cron.*
\dx+ cron.*