暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL定时任务框架pg_cron

原创 多米爸比 2020-02-06
3987

参考 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乐知乐享交流群,欢迎关注我文章的小伙伴进群吹牛唠嗑,交流技术,互赞文章。

123.png

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

456.png

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

文章被以下合辑收录

评论