资讯专栏INFORMATION COLUMN

PostgreSQL实现job神器pg_cron

IT那活儿 / 3220人阅读
PostgreSQL实现job神器pg_cron

点击上方蓝字关注了解我们~



为何不用PGAgent,而用pg_cron?




PGAgent功能确实不错,但是需要的依赖太多了,需要先装PGadmin以及一大堆的依赖包,这导致使用起来非常不方面,很不友好。而pg_cron相对而言简单了很多,只需要编译和修改三两个参数就可以了。


pg_cron用法




  2.1安装


就和我们平常装插件一样三步走,解压,编译,安装

$unzip pg_cron-main.zip

$cd pg_cron-main

$make $ make install

友情提示:如果多个pg,需要先刷新pg的环境变量,再进行编译,否则后果。。。


通常装完插件,还有一个地方需要修改,那就是参数

pg_cron需要修改参数如下

shared_preload_libraries = pg_cron

cron.database_name = yxp


创建扩展

# create extension pg_cron;



至此安装已经成功,接下来就要看使用了


  2.2使用



使用起来其实也很简单

只需要利用我们装的pg_cron扩展中的schedule函数就很方便的加入需要执行的任务

我这里用了一个很简单的vacuummy_table做演示,方便起见设置的是每十分钟。

SELECT cron.schedule(0,10,20,30,40,50 * * * *, VACUUM my_table);





五个*咱们都知道和crontab里的一样代表分时日月周,后面接我们需要执行的语句即可。


如果我们想给这个任务起个名字呢,就在前面加上就好,如下所示:

做一个重启postgreSQL就更新一下pg_cron插件的操作

SELECT cron.schedule(upgrade-pgcron, @reboot, ALTER EXTENSION pg_cron UPDATE);



重点:

Jobname不仅仅可以方便我们看任务,同时再做更改job内容的时候提供必要的帮助


我又做了一个vacuummy_table的job,起了一个vacuum1的名字,这时候我们看到同时存在有两个vacuummy_table的job,一个jobid是15,一个是17。



这时,jobid=17的有jobname,我依据jobname做一个更改,把时间调成2点

select cron.schedule( vacuum1, 0 2 * * *, vacuum my_table);






这就充分体现的jobname的重要性。


我又随意加了几条job,等了等,发现job根本没有执行,看细节报了一堆连接错误



什么原因导致会报这种连接失败的错误呢?



经过查阅资料发现,由于我们的pg_cron使用的是libpq的方式连接,需要调整一些密码类的控制文件

第一种说法调整pg_hba.conf,第二种说法要调整.passwd,简单来说就是要免密登录。我一看,怎么这么麻烦,实在头皮发麻,要是我有很多用户,岂不每个都要配置一下,工作量也太大了吧!

我们简单喵下这两个配置

1)先看pg_hba.conf

每条记录可以是下面七种格式之一



有兴趣的自行官网查询含义,实在太多,就不赘述了


2)再看.passwd



这个简单一点,但也要一个个添加

其实,

现在的pg_cron版本已经更新到了1.3,功能也再完善,我们苦恼的东西其实已经被Bertrand和Nathan解决了,他们使用动态后台工作程序代替了连接,也就是再也不需要更改密码相关的参数文件,只需增加一个参数cron.use_background_workers= on,并重启一下,pg_cron强大功能由你带回家。


审核日志




审核日志可让我们查看正在运行的cron作业以及过去的作业运行

在我们上面就已经用过了,cron这个schema下有个job_run_details表,这个表其实就是查看我们命令执行的一些细节。

1)命令开始和结束的时间

2)pg_cron命令是否成功

3)返回的行数-或错误消息,

这些信息可帮助我们快速检测问题,是很有帮助的。

那么我们还有一个问题,这个表是会一直增加的,日志如何清理也是个问题?

这个问题就留给大家思考一下吧!



微信号:justdoit2019syy

关注我们,了解更多



文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130037.html

相关文章

  • Lombok pojo类小神器

    摘要:可以去下载包目前最新版本为。对于某个具体的类来说,出于安全或者性能或者其它方面的考虑,可能并不希望全部成员都出现在方法的返回值里。根据中的建议,方法和方法要同时实现,并且保证一致性。 前言 Lombok主页 Lombok下载 Lombok引入项目之后,便可以使用 本文记录了在项目中应用Lombok时的使用案例,希望对朋友你有一些帮助。 可以去 下载jar包 maven: ...

    stackfing 评论0 收藏0
  • Postgresql 备份与恢复

    摘要:指定要用于查找的口令文件的名称。前四个字段可以是确定的字面值,也可以使用通配符匹配所有。利用环境变量引用的文件权限也要满足这个要求,否则同样会被忽略。在上,该文件被假定存储在一个安全的目录中,因此不会进行特别的权限检查。 pg_dump pg_dump 把一个数据库转储为纯文本文件或者是其它格式. 用法: pg_dump [选项]... [数据库名字] 一般选项: -f, --fi...

    阿罗 评论0 收藏0
  • 如何搭建一个私人网盘

    摘要:文章主要讲了为什么要搭建私有网盘,以及如何用搭建。一石激起千层浪,关于如何选择网盘,如何应对网盘关闭的讨论一下子又变得此起彼伏。搭建一个只属于自己的网盘所以我决定搭建一个只属于自己的网盘。搭建方法首先你得先有一个自己的。。 文章主要讲了为什么要搭建私有网盘,以及如何用 docker + ownCloud 搭建。原文地址:http://geekplux.com/2016/10/2... ...

    taowen 评论0 收藏0
  • 分布式作业 Elastic Job 如何动态调整?

    摘要:前面分享了两篇分布式作业调度框架的介绍及应用实战。分布式作业调度神器分布式作业快速上手指南提供了简单易用的运维平台,方便用户监控动态修改作业参数作业操作及查询作业。管理员拥有全部操作权限,访客仅拥有察看权限。 前面分享了两篇分布式作业调度框架 Elastic Job 的介绍及应用实战。 ElasticJob-分布式作业调度神器 分布式作业 Elastic Job 快速上手指南! E...

    zhaochunqi 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<