参考 https://github.com/citusdata/pg_cron
1.安装pg_cron
$ cd /opt
$ wget https://github.com/citusdata/pg_cron/archive/v1.2.0.tar.gz
$ tar zxvf v1.2.0.tar.gz
$ cd pg_cron-1.2.0/
$ make PG_CONFIG=/opt/pgsql/bin/pg_config
$ make install PG_CONFIG=/opt/pgsql/bin/pg_config
2.编辑postgresql.conf
vi postgresql.conf
shared_preload_libraries = 'pg_cron'
cron.database_name = 'postgres' --pg_cron元数据存放数据库
3.重启数据库服务
$ pg_ctl -D /opt/data5555/ restart
4.创建扩展
-- 使用超级用户创建扩展
$ /opt/pg12/bin/psql -p5555 -Upostgres
postgres=# create extension pg_cron;
CREATE EXTENSION
5.赋予普通用户权限(可选)
postgres=# GRANT USAGE ON SCHEMA cron TO test;
6.普通用户创建job
cron格式如下
┌───────────── min (0 - 59)
│ ┌────────────── hour (0 - 23)
│ │ ┌─────────────── day of month (1 - 31)
│ │ │ ┌──────────────── month (1 - 12)
│ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
│ │ │ │ │ Saturday, or use names; 7 is also Sunday)
│ │ │ │ │
│ │ │ │ │
* * * * *
$ /opt/pg12/bin/psql -p5555 -Utest postgres
psql (12.1)
Type "help" for help.
--每分钟插入一条随机数据
postgres=> SELECT cron.schedule('* * * * *', $$insert into t values((random()*100)::int,'test');$$);
--每天上午10点执行清理(GMT)
postgres=> SELECT cron.schedule('0 10 * * *', 'VACUUM');
7.普通用户查询job列表
postgres=> select jobid,command from cron.job;
jobid | command
-------+--------------------------------------------------
6 | insert into t values((random()*100)::int,'test';
7 | VACUUM
(2 rows)
8.普通用户删除job
postgres=> select cron.unschedule(7);--cron.job.jobid
注意
1.pg_cron不会在备库运行job,但当备库提升为主库时会自动开启job。
2.pg_cron时间为GMT
保持联系
从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个PG乐知乐享交流群,欢迎关注我文章的小伙伴进群吹牛唠嗑,交流技术,互赞文章。

如果群二维码失效可以加我微信。

最后修改时间:2022-10-23 10:29:06
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




