Postgresql定时任务工具

PostgreSQL 没有内置的定时任务函数,如果想要定期执行一些脚本,需要需要配合其他工具执行。

1.第一种方法crontab,这个就不多说了,linux系统自带的定时任务,可以运行命令脚本。

crontab -e
打开文件,添加如下格式的命令

如:每天的00:00执行my.sql脚本

0 0 * * * psql -U username -d database < my.sql

每个星期一的2:00执行pg_dump备份

0 2 * * 1 pg_dump --no-password -U user database > backup.sql

如果想免密登陆,可以在.pgpass文件中添加相关密码

hostname:port:database:username:password

设置权限为600

chmod 600 .pgpass

2.使用pg_cron插件,此插件只支持linux平台

-- 每个星期一的01:00删除log表一周前的记录

SELECT cron.schedule('0 1 * * 1', $$DELETE FROM log WHERE created_time < now() - interval '1 week'$$);

-- 每天10:00执行vacuum

SELECT cron.schedule('0 10 * * *', 'VACUUM');

-- 取消所有任务

SELECT cron.unschedule(jobid) FROM cron.job;

PostgreSQL 11 on Red Hat, CentOS, Fedora, Amazon Linux安装过程如下:

# Add Citus Data package repository

curl https://install.citusdata.com/community/rpm.sh | sudo bash

# Install the pg_cron extension

sudo yum install -y pg_cron_11

For PostgreSQL 11 Debian 或者 Ubuntu 使用以下命令:

# Install the pg_cron extension

sudo apt-get -y install postgresql-11-cron

然后数据库配置文件,添加如下

# add to postgresql.conf:

shared_preload_libraries = 'pg_cron'

cron.database_name = 'postgres'

最后重启数据库

sudo /bin/systemctl restart postgresql-11

#or

sudo service postgresql-11 restart

创建pg_cron插件相关函数和元数据表

-- run as superuser:

CREATE EXTENSION pg_cron;

-- optionally, grant usage to regular users:

GRANT USAGE ON SCHEMA cron TO username;

参考:
https://github.com/citusdata/pg_cron
man crontab

你可能感兴趣的:(#,postgreSQL)