1、系统定时任务Linux 定时任务(crontab)或者 Windows 任务计划程序(Task Scheduler)为我们提供了一个实现定时任务传统的方法。以 crontab 为例,我们可以使用以下命令编辑任务列表:
crontab -e
然后在打开的文件中使用以下格式增加一行数据:
#分钟     小时   月份中的某一天  月份     星期          命令
#(0-59)  (0-23) (1-31)         (1-12)  (0-7 [7 or 0 == Sunday])
<minute> <hour> <day of month> <month> <day of week> <command>
2、pg_cron  pg_cron 是由 citusdata 公司开发的一个 PostgreSQL 定时任务插件(类似于 Oracle 中的 DBMS_SCHEDULER)。pg_cron 作为一个后台工作进程运行,使用类似 cron 的编辑语法,允许直接在数据库中执行定时任务。例如:  
-- 每周六 3:30am (GMT) 删除历史记录
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
 schedule
----------
       42

-- 每天 10:00am (GMT) 执行清理作业
SELECT cron.schedule('nightly-vacuum''0 10 * * *''VACUUM');
 schedule
----------
       43

-- 将清理作业修改为 3:00am (GMT)
SELECT cron.schedule('nightly-vacuum''0 3 * * *''VACUUM');
 schedule
----------
       43

-- 停止计划中的任务
SELECT cron.unschedule('nightly-vacuum' );
 unschedule 
------------
 t
(1 row)

SELECT cron.unschedule(42);
 unschedule
------------
          t
 安装 pg_cron pg_cron 目前只支持 Linux 操作系统。对于 Red Hat、CentOS 以及 Fedora 等操作系统可以使用以下命令进行安装(PostgreSQL 12): 
sudo yum install -y pg_cron_12
 对于 Debian 以及 Ubuntu 可以使用以下命令进行安装(PostgreSQL 12): 
sudo apt-get -y install postgresql-12-cron
 另外,我们也可以使用源码进行编译安装:  
git clone https://github.com/citusdata/pg_cron.git
cd pg_cron
# Ensure pg_config is in your path, e.g.
export PATH=/usr/pgsql-12/bin:$PATH
make && sudo PATH=$PATH make install
 配置 pg_cron 为了在启动 PostgreSQL 时运行 pg_cron 后台工作进程,我们需要将 pg_cron 添加到 postgresql.conf 文件中的 shared_preload_libraries 配置项。默认情况下,pg_cron 后台进程使用 postgres 数据库获取所需的元数据。但是我们也可以使用 cron.database_name 配置参数进行设置。  
shared_preload_libraries = 'pg_cron'
cron.database_name = 'postgres'
 重启 PostgreSQL: 
sudo service postgresql-12 restart
 然后我们可以使用以下命令创建 pg_cron 函数以及元数据相关的