利用pgagent创建定时任务
使用postgresql自带的pgagent,可以很方便地创建定时执行任务。现在网上的资料都比较旧,postgresql版本更新得比较快,导致网上的一些教程都不合用了,现在我写分享一下自己的经验。
postgresql的版本是 9.x
1.安装pgagent。pgagent在以前旧的版本是pgadmin自带的,但新版本的pgagent是需要通过postgresql自带的application stack builder这个软件来安装的。具体流程如下:
*在这里要填写postgresql的postgres的用户名密码,或者具有操作postgres这个数据库权限的用户账号。因为pgagent需要在postgres这个数据库里面创建相应的表,所以这里填写的用户必须需要有操作postgres这个数据库的权限,在这里就用最大权限的postgres用户。
*在这里是埴写执行pgagent的windows用户账号,如果是域用户,请填写完整的域用户名和密码。因为pgagent会在windows的服务里面添加一个叫“postgresql scheduling agent - pgagent”的服务,而这个服务需要登录后才能运行,所以这里填写的账号必须是当前widnows可以登录的账号。
来到这里,就表示pgagent已经成功安装了。可以到windows的服务里面看一下pgagent的服务添加没有,是否在运行:
2.创建job. 当成功安装pgagent,并且pgagent已经在正常运行后,接下来的任务就是创建定时执行任务。postgresql的定时任务的概念分为两个部分:schedule和step。 schedule是定时器,配置这个job什么时候执行。而step是执行任务的内容。通过这两部分结合,就可以配置这个job什么时候做什么。一个job可以有多个schedule和多个step,他们是叠加的作用。
具体操作如下:
新建一个job,命名为job1,设置job class为routine maintenance,并且勾选前面的enabled。
为job1添加schedule,命名为schedule1,勾选enabled,然后设置开始和结束时间。如果结束时间不填,就表示这个job会无止境地运行下去。然后在times这个tab的minutes部分,勾选 00 和 30 ,这里表示这个job1会在每个小时的整点(00),和半点(30)执行。也就是每隔30分钟执行一次。如果只勾选 30, 就表示每个小时的30分钟执行,例如 4:30,5:30,这就是每隔一个小时执行一次了。其它的hours,week days,month days,months的概念是相同的。
另外exceptions tab是例外的情况,就是当这种情况的时候就不会执行这个job。
然后就是为job1添加执行的内容。现在添加一个step,命名为step1。勾选enabled。然后选择需要执行这个job的数据库。另外还需要注意kind部分和on error部分。kind部分是指明执行这个job是sql还是batch类型。job除了可以运行sql,还可以运行windows的batch命令。在这个例子中我们选用sql。在on error部分,表示当执行这个job出现错误的时候,是停止(fail),是正常(succeed),还是忽略(ignore)。现在这个例子选用fail,就表示当执行的内容一出错,就停止运行,退出。
现在就是定义job1需要执行的sql,一般建议把这些sql写在一个事务中,这样就算job1运行失败,都不会影响到数据。
到这一步,job1就基本创建完成了。
现在要监视job1的运行状态,可以通过pgadmin,在job1的properties tab,可以看到job1下次运行的时间,上次运行的时间,结果,当前是否在运行。还可以通过 statistics tab,查看job1运行的次数。
好了,到这里,如何用pgagent创建定时任务的介绍就完了。以后再有更深入的探讨,再给大家介绍。
谢谢
