


操作系统定时任务
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://[email protected]': <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);以下命令表示从 0 点到 20 点,每两个小时的 23 分时运行“MyJob”任务: SELECT timetable.job_add('MyJob', 'SELECT public.my_func()' , NULL, 'SQL', '23 0-20/2 * * *', live := TRUE);pg_timetable 计划任务的完整配置由 3 个阶段组成:
-
第一个阶段用于配置 base_task,定义需要执行的操作。包括 SQL 语句、外部程序以及内置的操作。 -
第二个阶段用于配置 task_chain,定义一组顺序执行的基本任务。 -
第三阶段用于配置 chain_execution_config,定义任务链的执行计划。


总结


☞女朋友的一个建议,这位程序员创立仅 551 天公司就被 10 亿美元收购了
☞抽成 30% 的苹果税是良心价?谷歌也学“坏”了
☞“面向对象就是一个错误!”
☞回溯 Rust 2020:正在成为最受欢迎的编程语言


文章评论