Skip to content

Commit e5eaaec

Browse files
committed
add CN version of pg_cron extension
1 parent 6c3f57a commit e5eaaec

File tree

3 files changed

+106
-0
lines changed

3 files changed

+106
-0
lines changed

CN/modules/ROOT/images/p31.png

79 KB
Loading

CN/modules/ROOT/images/p32.png

193 KB
Loading
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
:imagesdir: ./images
5+
6+
= pg_cron
7+
8+
== 概述
9+
在 PostgreSQL 中运行周期性任务,例如执行 VACUUM或删除旧数据,是一种常见需求。实现这一点的简单方法是配置 cron或其他外部守护进程,使其定期连接到数据库并运行命令。然而,随着数据库越来越多地作为托管服务或独立容器运行,配置和运行一个单独的守护进程通常变得不切实际。此外,很难让您的 cron任务感知故障转移,或者跨集群节点调度任务。
10+
11+
pg_cron 是 PostgreSQL 的开源定时任务扩展,允许直接在数据库内部设置 cron 风格的任务调度,用于自动化数据维护任务(清理,聚合), 数据库健康检查,执行存储过程和自定义函数等操作。它将cron任务存储在表中,周期性任务会随着 PostgreSQL 服务器自动进行故障转移。详情可以参见https://github.com/citusdata/pg_cron[pg_cron文档]。
12+
13+
== 安装配置
14+
15+
[TIP]
16+
环境中已经安装了IvorySQL1.17及以上版本,安装路径为/usr/local/ivorysql/ivorysql-1
17+
18+
=== 源码安装
19+
20+
```
21+
# 拉取pg_cron源码
22+
git clone https://github.com/citusdata/pg_cron.git
23+
cd pg_cron
24+
# 将pg_config的路径设置到PATH环境变量里,eg:
25+
export PATH=/usr/local/ivorysql/ivorysql-1/bin/:$PATH
26+
make
27+
make install
28+
```
29+
30+
=== 配置文件 (ivorysql.conf)
31+
32+
```
33+
# 共享预加载扩展
34+
shared_preload_libraries = 'pg_cron'
35+
36+
# 指定任务元数据存储库(默认当前库)
37+
cron.database_name = 'ivorysql'
38+
39+
# 允许的最大并发任务数
40+
cron.max_running_jobs = 5
41+
```
42+
43+
=== 重启服务
44+
45+
```
46+
pg_ctl restart -D ./data -l logfile
47+
```
48+
49+
=== 创建Extension并确认pg_cron版本
50+
51+
psql 连接到数据库,执行如下命令:
52+
```
53+
ivorysql=# CREATE extension pg_cron;
54+
CREATE EXTENSION
55+
56+
ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'pg_cron';
57+
name | default_version | installed_version | comment
58+
---------+-----------------+-------------------+---------------------------
59+
pg_cron | 1.6 | |Job scheduler for PostgreSQL
60+
(1 row)
61+
```
62+
63+
== 核心功能使用
64+
65+
=== 创建定时任务
66+
67+
```
68+
SELECT cron.schedule(
69+
'nightly-data-cleanup', -- 任务名称(唯一标识)
70+
'0 3 * * *', -- cron表达式(每天UTC 3:00)
71+
$$DELETE FROM logs
72+
WHERE created_at < now() - interval '30 days'$$ -- 执行SQL
73+
);
74+
```
75+
76+
cron表达式速查表:
77+
78+
|====
79+
|示例|含义
80+
|'0 * * * *'|每小时整点执行
81+
|'*/15 * * * *'|每15分钟执行
82+
|'0 9 * * 1-5'|工作日早9点执行
83+
|'0 1 1 * *'|每月1日凌晨1点执行
84+
|====
85+
86+
pg_cron还允许使用 '$'表示月份的最后一天。
87+
88+
=== 任务管理
89+
90+
```
91+
# 查看所有任务
92+
SELECT * FROM cron.job;
93+
94+
image::p31.png[]
95+
96+
# 查看任务执行历史
97+
SELECT * FROM cron.job_run_details ORDER BY start_time DESC LIMIT 10;
98+
99+
image::p32.png[]
100+
101+
# 删除任务
102+
SELECT cron.unschedule('nightly-data-cleanup');
103+
104+
# 暂停任务(更新状态)
105+
UPDATE cron.job SET active = false WHERE jobname = 'delete-job-run-details';
106+
```

0 commit comments

Comments
 (0)