pgagent 作为postgresql的一个任务调度代理,在postgresql 9.0 以前 是附带在pgadmin 包下面 的,只是默认不安装,9.0之后作为了一个单独是的安装包。所以要使用pgagent定时任务调度的话还得单独安装。
本人选择的安装方式是用docker-compose分别安装的postgreSQL和pgamdin,由于docker hub上找的的pgagent在安装的过程中一直出错,所有最后采取yum的方式安装的pgagent。
1、docker-compose安装postgrelSQL和pgadmin
version: "2.1"
services:
postgrestest:
image: postgres:11.5
restart: unless-stopped
environment:
POSTGRES_DB: db1
POSTGRES_USER: root
POSTGRES_PASSWORD: 123456
ports:
- 5432:5432
volumes:
- /data/postgresql1:/var/lib/postgresql/data
pgadmin4:
image: dpage/pgadmin4
restart: unless-stopped
ports:
- 8001:80
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: 123456
2、yum安装pgagent
先查找pgagent版本
yum search pgagent
此处是查找不到相关资源的,需要更改资源地址
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
然后再进行search
由于我安装的postgresql是11.版本,所以下载11版本的pgagent
yum install pgagent_11.x86_64
安装成功后查询一下pgagent的安装路径
find -name pgagent_11
运行路径应该是最后一个,运行pgagent
/usr/bin/pgagent_11 host=localhost port=5432 dbname=db1 user=root password=123456
其中port,dbname ,user ,password为连接postgresql的信息,与docker-compose中的信息一致
查看pgagent的运行状态
此时表示pgagent已经正常运行。
3、在pg里运行sql建表
在pg的安装目录下有创建job表的相关sql
用dbeaver连接上postgresql,将sql中的第一行的BEGIN TRANSACTION;和最后一行的COMMIT TRANSACTION注释掉并运行sql
sql执行成功后会生成名字为pgagent的schema,其中包含pgagent的的数据字典表
pga_exception : 记录作业执行异常信息
pga_job: 作业定义的基本信息,作业起止时间,最后运行时间等
pga_jobagent:pgAgent的配置信息,服务器上pgAgent的地址和启动时间
pga_jobclass: pgAgent的配置信息,定义作业类型
pga_joblog:每个作业的运行日志,包含启动时间、执行时长。
pga_jobstep:每个job步骤的定义在这个表里。
pga_jobsteplog:每个job步骤的执行日志,包含步骤的开始时间,执行时长。
pga_schedule:job调度的定义在这个表里。
4,执行计划创建
使用pgadmin工具连接目标库
pgadmin已经通过docker-compose安装完成,通过浏览器访问其端口即可进入配置页面
其中用户名密码为docker-compose中配置的内容
4.1 创建name为job1的job
为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运行的次数。