PostgreSQL中定时job执行

业务分析

近期项目需要定期清理数据库中的多余数据,即每月1号删除指定表中一年以上的数据。 
初步分析这种定时job可以使用一下两种技术实现:

  • Linux的crontab功能
  • pgadmin的pgAgent功能

为了避免数据库系统和操作系统的绑定,最后决定在数据库层面实现自动清理功能,即使用pgAgent功能

介绍

pgAgent是pgAdmin III工具中的一个插件,它在pgAdmin III v1.4版本中引用。 
主要用于PostgreSQL的作业调度代理,能够在复杂的时间表上运行多步批处理shell和SQL任务。 
需要注意的是,pgAgent需要一些数据库表和其他对象的支持,因此需要先安装pgAgent数据库。

环境

  • PostgreSQL:
操作系统:CentOS Linux release 7.3.1611 (Core)
数据库系统: PostgreSQL 9.5.8
IP: 192.168.230.134
port: 5432

安装

安装pgAdmin III

yum install pgadmin3_95.x86_64 

输入:

[root@localhost ~]# yum install pgadmin3_95.x86_64
Loaded plugins: fastestmirror, langpacks
base                                                             | 3.6 kB  00:00:00
epel/x86_64/metalink                                             | 6.4 kB  00:00:00
extras                                                           | 3.4 kB  00:00:00
pgdg95                                                           | 4.1 kB  00:00:00
updates                                                          | 3.4 kB  00:00:00
Loading mirror speeds from cached hostfile* base: mirrors.163.com* epel: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.163.com* updates: mirrors.163.com
Resolving Dependencies
--> Running transaction check
---> Package pgadmin3_95.x86_64 0:1.22.1-1.rhel7 will be installed
--> Processing Dependency: wxGTK for package: pgadmin3_95-1.22.1-1.rhel7.x86_64
--> Processing Dependency: libwx_gtk2u_xrc-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_stc-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_html-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_core-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_aui-2.8.so.0(WXU_2.8.5)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_aui-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_adv-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_baseu_xml-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_baseu_net-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_baseu-2.8.so.0(WXU_2.8.5)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_baseu-2.8.so.0(WXU_2.8)(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_xrc-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_stc-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_html-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_core-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_aui-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_gtk2u_adv-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_baseu_xml-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_baseu_net-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Processing Dependency: libwx_baseu-2.8.so.0()(64bit) for package: pgadmin3_95-1.22.1-1.rhel7.x86_64 --> Running transaction check ---> Package wxBase.x86_64 0:2.8.12-20.el7 will be installed ---> Package wxGTK.x86_64 0:2.8.12-20.el7 will be installed --> Processing Dependency: libSDL-1.2.so.0()(64bit) for package: wxGTK-2.8.12-20.el7.x86_64 --> Running transaction check ---> Package SDL.x86_64 0:1.2.15-14.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================================  Package Arch Version Repository Size ======================================================================================== Installing: pgadmin3_95 x86_64 1.22.1-1.rhel7 pgdg95 3.2 M Installing for dependencies: SDL x86_64 1.2.15-14.el7 base 204 k wxBase x86_64 2.8.12-20.el7 epel 588 k wxGTK x86_64 2.8.12-20.el7 epel 2.9 M Transaction Summary ======================================================================================== Install 1 Package (+3 Dependent packages) Total download size: 6.9 M Installed size: 27 M Is this ok [y/d/N]: y Downloading packages: (1/4): SDL-1.2.15-14.el7.x86_64.rpm | 204 kB 00:00:00 (2/4): wxBase-2.8.12-20.el7.x86_64.rpm | 588 kB 00:00:00 (3/4): wxGTK-2.8.12-20.el7.x86_64.rpm | 2.9 MB 00:00:01 (4/4): pgadmin3_95-1.22.1-1.rhel7.x86_64.rpm | 3.2 MB 00:00:48 ---------------------------------------------------------------------------------------- Total 147 kB/s | 6.9 MB 00:48 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : wxBase-2.8.12-20.el7.x86_64 1/4 Installing : SDL-1.2.15-14.el7.x86_64 2/4 Installing : wxGTK-2.8.12-20.el7.x86_64 3/4 Installing : pgadmin3_95-1.22.1-1.rhel7.x86_64 4/4 Verifying : SDL-1.2.15-14.el7.x86_64 1/4 Verifying : wxGTK-2.8.12-20.el7.x86_64 2/4 Verifying : wxBase-2.8.12-20.el7.x86_64 3/4 Verifying : pgadmin3_95-1.22.1-1.rhel7.x86_64 4/4 Installed: pgadmin3_95.x86_64 0:1.22.1-1.rhel7 Dependency Installed: SDL.x86_64 0:1.2.15-14.el7 wxBase.x86_64 0:2.8.12-20.el7 wxGTK.x86_64 0:2.8.12-20.el7 Complete!

安装pgAgent

yum install pgagent_95

输入:

[root@localhost ~]# yum install pgagent_95
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile* base: mirrors.163.com* epel: mirrors.ustc.edu.cn* extras: mirrors.163.com* updates: mirrors.163.com
Resolving Dependencies
--> Running transaction check
---> Package pgagent_95.x86_64 0:3.4.0-9.rhel7 will be installed
--> Finished Dependency ResolutionDependencies Resolved========================================================================================
 Package              Arch             Version                   Repository        Size
========================================================================================
Installing:pgagent_95           x86_64           3.4.0-9.rhel7             pgdg95            42 kTransaction Summary
========================================================================================
Install  1 PackageTotal download size: 42 k
Installed size: 151 k
Is this ok [y/d/N]: y
Downloading packages:
pgagent_95-3.4.0-9.rhel7.x86_64.rpm | 42 kB 00:00:02 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : pgagent_95-3.4.0-9.rhel7.x86_64 1/1 Verifying : pgagent_95-3.4.0-9.rhel7.x86_64 1/1 Installed: pgagent_95.x86_64 0:3.4.0-9.rhel7 Complete!

在数据库上配置pgAgent

找到pgagent.sql和pgagent_upgrade.sql文件路径,并在需要job功能的数据库上执行 
将会在数据库中创建一个pgagent模式,并创建相应的功能表和函数

psql -U postgres
postgres=# \i /usr/share/pgagent_95-3.4.0/pgagent.sql
postgres=# \i /usr/share/pgagent_95-3.4.0/pgagent_upgrade.sql
postgres=# \q

输入:

[root@localhost pgagent_95-3.4.0]# psql -U postgres
psql (9.5.9)
Type "help" for help.postgres=# \i /usr/share/pgagent_95-3.4.0/pgagent.sql
BEGIN
CREATE SCHEMA
COMMENT
CREATE TABLE COMMENT CREATE TABLE CREATE INDEX COMMENT INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 INSERT 0 1 CREATE TABLE COMMENT COMMENT CREATE TABLE CREATE INDEX COMMENT COMMENT COMMENT CREATE TABLE CREATE INDEX COMMENT CREATE TABLE CREATE INDEX CREATE INDEX COMMENT CREATE TABLE CREATE INDEX COMMENT COMMENT CREATE TABLE CREATE INDEX COMMENT COMMENT COMMENT CREATE FUNCTION CREATE FUNCTION COMMENT CREATE FUNCTION COMMENT CREATE FUNCTION COMMENT CREATE TRIGGER COMMENT CREATE FUNCTION COMMENT CREATE TRIGGER COMMENT CREATE FUNCTION COMMENT CREATE TRIGGER COMMENT COMMIT postgres=# \i /usr/share/pgagent_95-3.4.0/pgagent_upgrade.sql CREATE FUNCTION CREATE FUNCTION COMMENT psql:/usr/share/pgagent_95-3.4.0/pgagent_upgrade.sql:49: ERROR: column "jstconnstr" of relation "pga_jobstep" already exists ALTER TABLE ALTER TABLE postgres=# \q 

如果数据库满足以下条件: 
* PostgreSQL 版本高于9.1 
* pgAgent 版本高于3.4.0

可使用简易安装模式:

[root@localhost pgagent_95-3.4.0]# psql -U postgres
psql (9.5.9)
Type "help" for help.postgres=# CREATE EXTENSION pgagent;

效果相同

启动pgAgent守护程序

语法:

pgagent_95 [options] <connect-string>
options:
-f run in the foreground (do not detach from the terminal)
-t <poll time interval in seconds (default 10)> -r <retry period after connection abort in seconds (>=10, default 30)> -s <log file (messages are logged to STDOUT if not specified> -l <logging verbosity (ERROR=0, WARNING=1, DEBUG=2, default 0)>

实例:

[root@localhost pgagent_95-3.4.0]# pgagent_95 hostaddr=192.168.230.134 dbname=postgres user=postgres password=oracle

执行计划创建

使用pgadmin III工具连接目标库(可以使用其他机器远程连接目标库)

配置如下:

进入pgadmin后可看到作业状态,如下图所示:

创建作业date_delete_new

然后在date_delete_new作业中添加执行计划和步骤

创建计划delete_date_new

计划其实就是作业的执行时间表,可以在其中设置作业的运行时间,最小单位为min,设置方式与linux的cron控件类似

本次的业务要求是每月1号执行删除操作,顾只需设置每月一日执行即可:

新建计划:

设置日期为每月的1号

设置时间为00点00分

创建步骤delete_date_new

步骤是可以执行的SQL脚本或shell脚本,当计划条件触发时,作业的每个步骤将依次以字母数字名称顺序运行

本次的业务要求是删除表中一年以前的数据,以test表为例

新建步骤: 
需要指定操作的数据库(postgres)

在定义中写入所要执行的脚本,如:

DELETE FROM "test"."test" where time < CURRENT_DATE-('1 year')::INTERVAL;

到此执行计划创建完成

转载于:https://www.cnblogs.com/telwanggs/p/11547419.html

PostgreSQL中定时job执行(pgAgent)相关推荐

  1. python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...

    python中如何定时执行某一个函数 = =怎么连接..先调用注册函数 然后调用登录函数就行.顺序执行.至于如果你说注册失败不进行登录的话 直接在注册函数里面处理 注册失败 return def si ...

  2. PostgreSQL查询当前执行中SQL的执行计划——pg_show_plans

    点击上方"蓝字" 关注我们,享更多干货! 执行计划存储 如果同样的SQL要执行很多遍,且每次都是同样的执行计划.每次都发生硬解析,则会消耗大量时间.类似于Oracle存放执行计划的 ...

  3. PostgreSQL中的执行计划

    PostgreSQL中的执行计划 EXPLAN 预生成执行计划 EXPLAN sql 真实执行计划 explan analyze sql 输出详细内容 explan(analyze on, timin ...

  4. Linux中的定时自动执行功能(at,crontab)

    Linux中的定时自动执行功能(at,crontab) 概念 在Linux系统中,提供了两种提前对工作进行安排的方式 at 只执行一次 crontab 周期性重复执行 通过对这两个工具的应用可以让我们 ...

  5. Postgresql中如何终止正在执行的查询

    在使用数据库过程中,我们难免要终止一些正在执行的查询等语句,比如不合理的超长大事物,对数据库性能有影响的偶发性查询.一般在pg中使用以下两个函数终止相关查询,这里不在详述两个函数的区别. 直接给出官方 ...

  6. PostgreSQL中的查询:1.查询执行阶段

    PostgreSQL中的查询:1.查询执行阶段 开始关于PG内部执行机制的文章系列.这一篇侧重于查询计划和执行机制. 本系列包括: 1.查询执行阶段(本文) 2.统计数据 3.顺序扫描 4.索引扫描 ...

  7. 在SQL server中如何定时自动执行存储过程

    在SQL server中如何定时自动执行存储过程 1.首先开启sql代理服务 2.打开sqlserver软件 3.拉开SQL Server 服务菜单 4.右键作业,点击新增作业 5.在一般中添加名称和 ...

  8. SpringBoot 中定时执行注解(@Scheduled、@EnableScheduling)

    项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息.Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor .TaskScheduler 接口. ...

  9. java定时执行某个方法_Java中定时执行任务的三种方法

    Java中定时执行任务的三种方法 1)java.util.Timer 这个方法应该是最常用的,不过这个方法需要手工启动你的任务: Timer timer=new Timer(); timer.sche ...

最新文章

  1. pom配置之:distributionManagementsnapshot快照库和release发布库
  2. linux排序语言,Linux sort 排序命令uniq去重复行
  3. 修改 PhpStorm 的字体和样式
  4. php在图片上绘制汉字之imageTtfText()函数
  5. mysql5.5数据库安装
  6. Redis详解——常用命令总结(完善中)
  7. mysql怎么看实例名_南方“中看不中吃”的前4名水果,莲雾只是垫底,你怎么看?...
  8. iBatis for net 框架使用
  9. mysql创建的是拉丁_mysql 拉丁1 转换成 utf8
  10. JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
  11. JavaScript 图
  12. Golang的4种传递引用类型
  13. Shell:Ctrl+s暂停终端和Ctrl+q
  14. SQL内连接和外连接的区别、where和on的区别详细介绍
  15. Kotlin工程项目下的不同的源文件图标
  16. 车路协同边缘计算与边云协同概览
  17. 【视频】开发工具第12期:鸿蒙智联新交互体验实践分享(二)
  18. (附源码)基于java的校园二手书籍交易平台 毕业设计131558
  19. Linux从入门到放弃 docker
  20. 《设计模式解析》读书笔记

热门文章

  1. oracle ogg11.2.0.3,ogg在oracle database 11.2.0.3上还是谨慎使用集成捕捉模式
  2. linux内核数据结构实现--链表、队列和哈希
  3. sender分析之创建请求
  4. 做系统ghost步骤图解_掌握这几个步骤电脑小白也会做系统
  5. Arduino-ESP8266环境配置及点灯
  6. STM32F427 主频超过140M 死机
  7. leecode-3无重复字符串的最长子字符串C版-滑动窗口
  8. Linux GPIO
  9. java 文件中查找指定的单词,查找指定文本文件中的单词数的Java程序
  10. 快速入门RabbitMq,看这一篇就够了。