通过pgAgent实现PostgreSQL上的自动作业
在使用数据库时,我们经常会需要在上面跑一些定时作业,例如转历史库,批处理,定时维护数据等。Oracle可以通过其自带的job机制来进行,作为Oracle的替代方案之一的PostgreSQL没有自带job机制,但是可以通过pgAgent来补全功能。
在pgAdmin v1.9版本之前,pgAgent是其安装包的一部分,pgAdmin v1.9之后 pgAgent独立成一个单独的软件包。
1. 环境
操作系统 RHEL 6.3
数据库版本 PostgreSQL 10.3
2. 软件下载获取
在PG自己的yum源上可以下载到适配各个数据库版本的pgAgent及其依赖包。可以选择配置yum源安装或者在没有网络的内网环境下通过下载安装。如果下载安装则要补全依赖包。我这里是内网RHEL 6.3 软件工作站模式。需要下载:
wxBase-2.8.12-1.el6.x86_64.rpm pgagent_10-3.4.0-10.rhel6.x86_64.rpm
3. 部署pgAgent
# rpm -ivh wxBase-2.8.12-1.el6.x86_64.rpm warning: wxBase-2.8.12-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY Preparing... ########################################### [100%]1:wxBase ########################################### [100%]# rpm -ivh pgagent_10-3.4.0-10.rhel6.x86_64.rpm warning: pgagent_10-3.4.0-10.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY Preparing... ########################################### [100%]1:pgagent_10 ########################################### [100%]
默认pgAgent会被安装在/usr/share/pgagent_10 目录下,可执行文件位于/usr/bin/pgagent_10
软件包安装完成后在需要进行作业调度的数据库执行以下脚本完成作业调度相关数据库对象的创建工作(并非全局有效)
$ psql -U postgres -d postgres -f /usr/share/pgagent_10-3.4.0/pgagent.sql
脚本执行完后会在数据库内生成一个新的catalog,通过这个schema进行数据库作业的调度。
最后还需要启动pgAgent才算是全部完成。
$ pgagent_10 -s /PostgreSQL/10/data/pgagent.log hostaddr=127.0.0.1 port=5432 dbname=postgres user=postgres password=123456
4.作业部署
完成pgAgent的安装部署工作后,在pgAdmin上出现相应的菜单
通过pgAgent可以使用图形化页面维护作业,不知道填什么的时候注意看提示基本就知道了。
- 定义作业名称
- 定义作业步骤
在General页定义通用信息
在code页定义需要执行的代码
- 定义调度信息
在general页定义基本信息
在Repeat页定义周期,周期使用cron风格。
以上所有操作也可以通过SQL进行,上面所有操作对应的代码如下:
DO $$ DECLAREjid integer;scid integer; BEGIN -- Creating a new job INSERT INTO pgagent.pga_job(jobjclid, jobname, jobdesc, jobhostagent, jobenabled ) VALUES (1::integer, 'job_test2'::text, ''::text, ''::text, true ) RETURNING jobid INTO jid;-- Steps -- Inserting a step (jobid: NULL) INSERT INTO pgagent.pga_jobstep (jstjobid, jstname, jstenabled, jstkind,jstconnstr, jstdbname, jstonerror,jstcode, jstdesc ) VALUES (jid, 'step1'::text, true, 's'::character(1),''::text, 'postgres'::name, 'f'::character(1),'insert into t1 values (999);'::text, ''::text ) ;-- Schedules -- Inserting a schedule INSERT INTO pgagent.pga_schedule(jscjobid, jscname, jscdesc, jscenabled,jscstart, jscend, jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths ) VALUES (jid, 'job_sch_test2'::text, ''::text, true,'2018-05-24 15:12:33+08'::timestamp with time zone, '2018-05-25 15:12:39+08'::timestamp with time zone,-- MinutesARRAY[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true]::boolean[],-- HoursARRAY[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false]::boolean[],-- Week daysARRAY[false, false, false, false, false, false, false]::boolean[],-- Month daysARRAY[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]::boolean[],-- MonthsARRAY[false, false, false, false, false, false, false, false, false, false, false, false]::boolean[] ) RETURNING jscid INTO scid; END $$;
再回到图形界面,除了预先定义好的作业外,通过作业上的run now选项可以立刻执行一次。
上面的设置里我选择在每天的15点56-59分,一共执行4次作业,每次向t1表写入一条数据。完成后
5. pgAgent的数据字典表
pgAgent的相关表都位于Catalogs/pgAgent下。
pga_exception : 记录作业执行异常信息
pga_job: 作业定义的基本信息,作业起止时间,最后运行时间等
pga_jobagent:pgAgent的配置信息,服务器上pgAgent的地址和启动时间
pga_jobclass: pgAgent的配置信息,定义作业类型
pga_joblog:每个作业的运行日志,包含启动时间、执行时长。
pga_jobstep:每个job步骤的定义在这个表里。
pga_jobsteplog:每个job步骤的执行日志,包含步骤的开始时间,执行时长。
pga_schedule:job调度的定义在这个表里。
转载于:https://www.cnblogs.com/aegis1019/p/9085133.html
通过pgAgent实现PostgreSQL上的自动作业相关推荐
- postgresql 重启记录_PostgreSQL 高可用:PostgreSQL复制和自动故障转移
原文:PostgreSQL Replication and Automatic Failover Tutorial[1] 作者:Abbas Butt 翻译整理:alitrack 1.什么是 Postg ...
- 上传自动显示图片 代码
<html> <head> <title>上传自动显示图片</title> <script type="text/javas ...
- python自动源码_谷歌推出Tangent开源库,在Python源代码上做自动微分
原标题:谷歌推出Tangent开源库,在Python源代码上做自动微分 李林 编译自 Google Research Blog 谷歌今天推出了一个新的开源Python自动微分库:Tangent. 和现 ...
- mac上通过自动操作达到右键通过vscode打开文件、文件夹
mac上通过自动操作达到右键通过vscode打开文件.文件夹 打开mac中的自动操作app 搜索运行shell脚本 工作流程收到当前:文件或文件夹,位于:访达,传递输入为:变量,并输入一下代码 for ...
- 迪士尼源码_如何在迪士尼+上禁用自动播放和背景视频
迪士尼源码 Just like Netflix, Disney+ makes it easy to binge-watch a show by automatically playing the ne ...
- linux18.04循环登陆,在Ubuntu 18.04 Bionic Beaver Linux上启用自动登录
目的 目标是在Ubuntu 18.04 Bionic Beaver Linux上启用自动登录 操作系统和软件版本 操作系统: - Ubuntu 18.04 Bionic Beaver Linux 软件 ...
- Android 基于GSYVideoPlayer实现短视频软件上下滑自动播放视频
先放效果图 两个视频的地址: private final String mp4_a = "http://vfx.mtime.cn/Video/2019/03/19/mp4/190319212 ...
- 从算法上解读自动驾驶是如何实现的?
从算法上解读自动驾驶是如何实现的? 科技新闻 小鹏汽车 2016-03-28 10:42 分享 3评论 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶 ...
- autocad electrical三级断路器放到多母线上不能自动适应宽度
问题 autocad electrical三级断路器放到多母线上不能自动适应宽度 解决 打开图形特性,更改阶梯默认设置中的间距,大于或等于母线间距的一半即可.
最新文章
- 1089: [SCOI2003]严格n元树
- 转:MFC中创建多线程
- 前端工业物联网开发(Electron + Typescript + Vue)
- Java中的Unsafe在安全领域的一些应用总结和复现
- 【福利赠书】命题专家点评中国研究生数学建模之现状
- 透视变换--图像拼接
- 花两个小时,做了个分页控件
- 【ZOJ 3715 —— 13年浙江省赛K】Kindergarten Election 【枚举答案进行判断】 【夺宝奇兵 —— CCPC-Wannafly Winter Camp Day1】
- 不要效法世界只要爱天父
- 知识图谱或成AI发展重点,投研数据整理耗时可从一周缩至一分钟
- Pyramidal Convolution
- python入门指南阅读答案_第二章 _【Python入门指南】免费在线阅读 - 九六城堡小说论坛...
- [SPRD] Q 版本开机 logo 显示原理
- Golang 基础:原生并发 goroutine channel 和 select 常见使用场景
- 蓝牙5.0与蓝牙4.2的有哪些区别,你了解吗?
- 马其顿驱动电源项目调光LED闪烁原因
- python对接蚂蚁金服支付宝
- 【华为机试真题 Python】窗口滑动和最大值
- 【译】「食人的大鹫」的运动方法 程序动画技术
- xpath爬取智联招聘--大数据开发职位并保存为csv
热门文章
- Oracle RAC 启动与关闭 (rac 命令示例)
- Android studio怎么配置javadoc生成项目API
- Failed to install *.apk on device *: timeout
- Re-installation failed due to different application signatures
- git-flow的分支管理 (Git branching model)
- MySql—锁机制原理
- RuntimeError: dictionary changed size during iteration
- 设计模式(2)--Singleton(单例模式)--创建型
- MySQL优化器cost计算
- Enterprise Library 企业库 V4.1