有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
本文介绍如何通过 pgAgent 功能来实现云数据库 PostgreSQL 的自动任务执行。推荐使用 pg_cron 插件实现定时的功能。

简介

如果业务需要定期清理数据库中的多余数据,定时做物化视图更新,定时 vacuum full,定时执行 DML 等数据库中需要定时做的事情,在 PostgreSQL 中可以通过以下功能来实现:
Linux 的 crontab 功能
pgadmin 的 pgAgent 功能
pgAgent 是 pgAdmin 工具中的一个插件,在 pgAdmin III v1.4 版本中引用。主要用于 PostgreSQL 的作业调度代理,能够在复杂的时间表上运行多步批处理 shell 和 SQL 任务。 需要注意的是,pgAgent 需要一些数据库表和其他对象的支持,因此需要先安装 pgAgent 插件。

操作方法

配置 pgAgent

1. 登录 PostgreSQL 实例,登录完成后,创建您的业务数据库。
2. 在需要开通 pgAgent 功能的 database 以及 postgres 库中分别执行以下语句:
注意
一定要在 postgres 库中也创建 pgagent。
psql > create extension pgagent;
CREATE EXTENSION
3. 配置反馈完成后,您需要通过 pgAgent 工具开启任务调度程序。 登录 CVM(建议 CVM 与 PostgreSQL 同一 VPC),根据实际数据库版本选择 pgAgent 版本,本文以11.8版本为例,安装 下载地址 中的 pgagent_11。
4. pgAgent 工具安装完成后,执行以下语句启动任务调度程序:
说明
请根据实际安装的 pgAgent 版本来使用命令,如果安装的是10版本,则为 pgagent_10。
请注意 dbname 一定需要填写 postgres,不能填写需要执行定时调度程序的 database,否则 pgAdmin 的页面中无法显示 job 配置项。
当连接执行时候,报错 ERROR: Unsupported schema version,请 提交工单 进行处理。
pgagent_11 hostaddr=IP地址 dbname=postgres user=用户名 port=端口 password=密码
5. 执行成功后,无任何回显提示,您可以使用以下命令来判断进程是否启动成功:
执行此语句,如果存在 pgagent 进程,则表示已经启动成功。
# ps -ef |grep pgagent
root 158553 1 0 Oct30 ? 00:00:15 pgagent_11 hostaddr=IP地址 dbname=postgres user=用户名 port=端口 password=密码

通过 pgAdmin 配置 pgAgent Jobs

1. 登录 PostgreSQL 控制台,在实例列表单击实例 ID,进入实例详情页,开启外网地址。
2. 打开 pgAdmin 4,通过外网地址访问您的 PostgreSQL,此时可以在界面中看到 pgAgent Jobs。


3. 在 pgAdmin 界面,右键选择 pgAgent Jobs > Create > Create Jobs,创建定时任务。
4. 在 General 界面,配置基础 Job 信息。


5. 进入 Step 界面,配置关于需要定时执行的内容,单击右上角的**+**添加一个 Step,为此 Step 配置一个名字,然后在 Code 子标签中配置需要执行的 SQL 语句等内容。


6. 进入 Schedules 界面,配置任务执行的调度信息:
6.1 在下方 General 子标签中,主要配置任务生效时间。


6.2 在下方 Repeat 子标签中,配置 crontab 风格的执行计划。


6.3 完成时间配置之后,也可以在 Exceptions 子标签中配置不执行任务的时间。
6.4 最后单击 Save 保存,此任务将根据配置的内容进行自动执行。