PostgreSQL 实现定时任务的 4 种方法



操作系统定时任务
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>
0 0 * * * pg_dump --no-password -U user db_name > backup.sql
chmod 600 .pgpass

pgAgent
安装 pgAgent

创建定时任务


点击“Save”按钮保存设置并创建任务,然后我们就可以在“pgAgent Job”节点下看到创建的任务。

pg_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
sudo yum install -y pg_cron_12
sudo apt-get -y install postgresql-12-cron
git clone https://github.com/citusdata/pg_cron.gitcd pg_cron# Ensure pg_config is in your path, e.g.export PATH=/usr/pgsql-12/bin:$PATHmake && sudo PATH=$PATH make install
配置 pg_cron
shared_preload_libraries = 'pg_cron'cron.database_name = 'postgres'
sudo service postgresql-12 restart
-- 使用 superuser 运行以下命令CREATE EXTENSION pg_cron;-- 可选操作,为其他用户授予访问权限GRANT USAGE ON SCHEMA cron TO username;

pg_timetable

安装 pg_timetable
docker run --rm \cybertecpostgresql/pg_timetable:latest \-h 10.0.0.3 -p 54321 -c worker001
docker run --rm \-e PGTT_PGHOST=10.0.0.3 \-e PGTT_PGPORT=54321 \cybertecpostgresql/pg_timetable:latest \-c worker001
$ env GIT_TERMINAL_PROMPT=1 go get github.com/cybertec-postgresql/pg_timetable/Username for 'https://github.com': <Github Username>Password for 'https://cyberboy@github.com': <Github Password>
$ cd ~/go/src/github.com/cybertec-postgresql/pg_timetable/$?go?run?main.go?--dbname=dbname?--clientname=worker001?--user=scheduler?--password=strongpwd或者,也可以编译成二进制程序并运行:
$ go build$?./pg_timetable?--dbname=dbname?--clientname=worker001?--user=scheduler?--password=strongpwd
$ cd ~/go/src/github.com/cybertec-postgresql/pg_timetable/$ go get github.com/stretchr/testify/$ go test ./...
$ RUN_DOCKER=true go test ./...
使用 pg_timetable
# ./pg_timetableApplication Options:-c, --clientname= Unique name for application instance-v, --verbose Show verbose debug information [$PGTT_VERBOSE]-h, --host= PG config DB host (default: localhost) [$PGTT_PGHOST]-p, --port= PG config DB port (default: 5432) [$PGTT_PGPORT]-d, --dbname= PG config DB dbname (default: timetable) [$PGTT_PGDATABASE]-u, --user= PG config DB user (default: scheduler) [$PGTT_PGUSER]-f, --file= SQL script file to execute during startup--password= PG config DB password (default: somestrong) [$PGTT_PGPASSWORD]--sslmode=[disable|require] What SSL priority use for connection (default: disable)--pgurl= PG config DB url [$PGTT_URL]--init Initialize database schema and exit. Can be used with --upgrade--upgrade Upgrade database to the latest version--no-program-tasks Disable executing of PROGRAM tasks [$PGTT_NOPROGRAMTASKS]
SELECT?timetable.job_add('MyJob',?'SELECT?public.my_func()'?,?NULL,?'SQL',?'5?0?*?8?*',?live?:=?TRUE);
SELECT?timetable.job_add('MyJob',?'SELECT?public.my_func()'?,?NULL,?'SQL',?'23?0-20/2?*?*?*',?live?:=?TRUE);
第一个阶段用于配置 base_task,定义需要执行的操作。包括 SQL 语句、外部程序以及内置的操作。 第二个阶段用于配置 task_chain,定义一组顺序执行的基本任务。 第三阶段用于配置 chain_execution_config,定义任务链的执行计划。


总结


?女朋友的一个建议,这位程序员创立仅 551 天公司就被 10?亿美元收购了
?抽成 30% 的苹果税是良心价?谷歌也学“坏”了
?“面向对象就是一个错误!”
?回溯 Rust 2020:正在成为最受欢迎的编程语言
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
赞助链接
排名
热点
搜索指数
- 1 习近平将发表二〇二六年新年贺词 7904141
- 2 2026年国补政策来了 7808738
- 3 东部战区:开火!开火!全部命中! 7712893
- 4 2026年这些民生政策将惠及百姓 7616985
- 5 小学食堂米线过期2.5小时被罚5万 7519709
- 6 解放军喊话驱离台军 原声曝光 7428214
- 7 为博流量直播踩烈士陵墓?绝不姑息 7327605
- 8 每月最高800元!多地发放养老消费券 7238391
- 9 数字人民币升级 1月1日起将计付利息 7141831
- 10 2026年1月1日起 一批新规将施行 7040675










CSDN
