前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >postgresql 定期任务的 PG_cron

postgresql 定期任务的 PG_cron

作者头像
AustinDatabases
发布2020-07-01 15:29:25
2.1K0
发布2020-07-01 15:29:25
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

基本上大部分数据库都有定时任务,最近开发问我PostgreSQL 要做定时任务,有的存储过程要在夜间去和financial 的 服务器来交互。我的第一个反应就是用LINUX 的定时任务不就可以了,但这个程序员提出 SQL SERVER ORACLE 都有定时任务,postgresql 也应该有吧。所以就有了这篇文字

首先为什么选择pg_cron ,pg_cron 在安装上要方便与 pgagent,也曾经安装过pgagent 但众多的一些依赖以及编译中的问题,导致pgagent 在某些初始化的方面并不友好。

pg_cron 是 citus 的一款开源产品,citus 也是POSTGRESQL 分布式插件的产品提供者。

安装相当简单

curl https://install.citusdata.com/community/rpm.sh

下载相关的 package repository

sudo yum install -y pg_cron_11

然后就直接yum 安装即可

安装完后,需要的是对他与postgresql进行配置

代码语言:javascript
复制
shared_preload_libraries = 'pg_cron'
cron.database_name = 'postgres'

但实际上如果这样安装很可能会,无法启动postgresql报无法找到pg_cron文件,别问为什么(呵呵)

这边能正常进行安装的方式是从git上下载文件,直接在有PG_CONFIG 的环境下,直接进行make ,make install 即可。

安装后还是需要在postgresql.conf 中添加那两句,重启服务器后就可以正常使用了

实际当中安装了pg_cron 扩展会在当前数据库生成一张cron.job表

下面就演示存储过程定期运行例子,数据库启动时会启动pg_cron

添加一个测试表

我们定期每分钟,往表里面插入一条数据

实际当中如果认为这么容易就能进行定期任务的执行那么大概率会失败

1 PG_CRON 使用的是libpq 的方式连接,也就是说他执行命令的方式不是在内部,直接执行命令,而是他通过连接的方式将命令发送进来,在执行。

2 既然如此,那有两点(经过碰过钉子,并且查询大部分相关文档都没有找到明确的答复),是需要注意的,1 nodename ,必须是本机的IP地址如果你配置了监听地址,则最好你的数据库服务的监听地址就是你填入nodename的地址。

2 你需要保证PG_HBA.CONF 中允许你的账户进行免密的访问,当然如果不行请设置.pgpass 到postgres 的用户目录中,否则你会经常看到无法连接的错误。

另外发现很多文章在说一个事情的时候,部分是不求细节的,例如如果我只想的语句是这样的 怎么办 call insert_D('a','b')写入到表里面如果按照固定的格式,前后加'' 那是一定会报错的,具体使用还需要注意

插入的数据的时候,需要在有单引号的地方,在添加单引号,

INSERT INTO cron.job (schedule, command, nodename, nodeport, database, username) VALUES ('0 4 * * *', 'call insert_D(''a'',''b'');', 'node-1', 5432, 'postgres', 'postgres');

或者下面的写法也可以被接受。

INSERT INTO cron.job (schedule, command, nodename, nodeport, database, username) VALUES ('0 4 * * *', $$call insert_D('a','b')$$, '192,.168.198.120', 5432, 'postgres', 'job');

另在cron 中会有两个函数,来进行添加和取消定时任务,但实际操作中,直接操作 cron.job 表的方式更为直接

使用函数添加JOB,需要提供什么时间允许,以及运行什么命令

取消的函数,直接给出job_id 就会直接需要禁止的JOB 的数字就可以了

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档