PostgreSQL 没有内置的定时任务函数,如果想要定期执行一些脚本,需要需要配合其他工具执行。
1.第一种方法crontab,这个就不多说了,linux系统自带的定时任务,可以运行命令脚本。
crontab -e
打开文件,添加如下格式的命令
如:每天的00:00执行my.sql脚本
0 0 * * * psql -U username -d database < my.sql
1
每个星期一的2:00执行pg_dump备份
0 2 * * 1 pg_dump --no-password -U user database > backup.sql
1
如果想免密登陆,可以在.pgpass文件中添加相关密码
hostname:port:database:username:password
1
设置权限为600
chmod 600 .pgpass
1
2.使用pg_cron插件,此插件只支持linux平台
– 每个星期一的01:00删除log表一周前的记录
SELECT cron.schedule(‘0 1 * * 1’, D E L E T E F R O M l o g W H E R E c r e a t e d t i m e < n o w ( ) − i n t e r v a l ′ 1 w e e k ′ DELETE FROM log WHERE created_time < now() - interval '1 week' DELETEFROMlogWHEREcreatedtime<now()−interval′1week′);
– 每天10:00执行vacuum
SELECT cron.schedule(‘0 10 * * *’, ‘VACUUM’);
– 取消所有任务
SELECT cron.unschedule(jobid) FROM cron.job;
1
2
3
4
5
6
7
8
9
10
11
PostgreSQL 11 on Red Hat, CentOS, Fedora, Amazon Linux安装过程如下:
curl https://install.citusdata.com/community/rpm.sh | sudo bash
sudo yum install -y pg_cron_11
1
2
3
4
5
6
7
For PostgreSQL 11 Debian 或者 Ubuntu 使用以下命令:
sudo apt-get -y install postgresql-11-cron
1
2
3
然后数据库配置文件,添加如下
shared_preload_libraries = ‘pg_cron’
cron.database_name = ‘postgres’
1
2
3
4
5
最后重启数据库
sudo /bin/systemctl restart postgresql-11
#or
sudo service postgresql-11 restart
1
2
3
4
5
创建pg_cron插件相关函数和元数据表
– run as superuser:
CREATE EXTENSION pg_cron;
– optionally, grant usage to regular users:
GRANT USAGE ON SCHEMA cron TO username;
1
2
3
4
5
6
7
参考:
https://github.com/citusdata/pg_cron
man crontab
原文链接:https://blog.csdn.net/dazuiba008/article/details/108219990?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-10.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-10.nonecase&request_id=5f472741cea070620e9400a4