CREATE EXTENSION pg_cron;
postgres=> GRANT USAGE ON SCHEMA cron TO other-user;
2020-12-08 16:41:00 UTC::@:[30647]:ERROR: permission denied for table pgbench_accounts2020-12-08 16:41:00 UTC::@:[30647]:STATEMENT: update pgbench_accounts set abalance = abalance + 12020-12-08 16:41:00 UTC::@:[27071]:LOG: background worker "pg_cron" (PID 30647) exited with exit code 1
postgres=> select jobid, username, status, return_message, start_time from cron.job_run_details where status = 'failed';jobid | username | status | return_message | start_time-------+------------+--------+-----------------------------------------------------+-------------------------------143 | unprivuser | failed | ERROR: permission denied for table pgbench_accounts | 2020-12-08 16:41:00.036268+00143 | unprivuser | failed | ERROR: permission denied for table pgbench_accounts | 2020-12-08 16:40:00.050844+00143 | unprivuser | failed | ERROR: permission denied for table pgbench_accounts | 2020-12-08 16:42:00.175644+00143 | unprivuser | failed | ERROR: permission denied for table pgbench_accounts | 2020-12-08 16:43:00.069174+00143 | unprivuser | failed | ERROR: permission denied for table pgbench_accounts | 2020-12-08 16:44:00.059466+00(5 rows)
cron.schedule (job_name,schedule,command);cron.schedule (schedule,command);
参数 | 描述 |
job_name | cron 任务的名字,可为空不设置。 |
schedule | 表示 cron 任务时间表的文本。格式是标准 cron 格式。 |
command | 要运行的命令的文本。 |
postgres=> SELECT cron.schedule ('test','0 10 * * *', 'VACUUM pgbench_history');schedule----------145(1 row)postgres=> SELECT cron.schedule ('0 15 * * *', 'VACUUM pgbench_accounts');schedule----------146(1 row)
# 格式是:分 时 日 月 星期# week (0 - 6) = sun,mon,tue,wed,thu,fri,sat# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,...,sat# | | | | |# * * * * *
cron.unschedule (job_id);cron.unschedule (job_name);
参数 | 描述 |
job_id | 计划 cron 任务时从 cron.schedule 函数返回的任务标识符。 |
job_name | 使用该 cron.schedule 函数计划的 cron 任务的名称。 |
postgres=> select cron.unschedule(108);unschedule------------t(1 row)postgres=> select cron.unschedule('test');unschedule------------t(1 row)
表 | 描述 |
cron.job | 包含有关每个计划任务的元数据。与此表的大多数交互应使用 cron.schedule 和 cron.unschedule 函数完成。 注意:不建议直接向此表授予更新或插入权限。 |
cron.job_run_details | 包含过去运行的计划任务的历史信息。这对于调查运行的任务的状态、返回消息以及开始和结束时间非常有用。 为了防止此表无限增长,请定期清除此表。 |
SELECT cron.schedule('manual vacuum', '0 22 * * *', 'VACUUM FREEZE pgbench_accounts');schedule----------1(1 row)
SELECT * FROM cron.job;jobid | schedule | command | nodename | nodeport | database | username | active-------+------------+-----------+-----------+----------+----------+----------+--------1 | 0 22 * * * | VACUUM ... | localhost | 5432 | postgres | test | t
SELECT cron.unschedule(1);unschedule------------t
postgres=> select * from cron.job_run_details;jobid | runid | job_pid | database | username | command | status | return_message | start_time | end_time-------+-------+---------+----------+----------+----------------------------------------+-----------+----------------+-------------------------------+-------------------------------1 | 1 | 3395 | postgres | adminuser| vacuum freeze pgbench_accounts | succeeded | VACUUM | 2020-12-04 21:10:00.050386+00 | 2020-12-04 21:10:00.072028+00(1 row)
SELECT cron.schedule('0 0 * * *', $$DELETEFROM cron.job_run_detailsWHERE end_time < now() – interval '7 days'$$);
postgres=> SHOW cron.log_run;
postgres=> SELECT cron.schedule('test manual vacuum', '29 03 * * *', 'vacuum freeze test_table');
postgres=> UPDATE cron.job SET database = 'test' WHERE jobid = 106;
postgres=> select * from cron.job;jobid | schedule | command | nodename | nodeport | database | username | active | jobname-------+-------------+----------------------------------------+-----------+----------+-----------+-----------+--------+-------------------------2 | 29 03 * * * | vacuum freeze test_table | localhost | 8192 | test | adminuser | t | database1 manual vacuum1 | 59 23 * * * | vacuum freeze pgbench_accounts | localhost | 8192 | postgres | adminuser | t | manual vacuum(2 rows)
参数 | 描述 |
cron.database_name | 保存 pg_cron 元数据的数据库。 |
cron.host | 要连接到 PostgreSQL 的主机名。您无法修改此值。 |
cron.log_run | 将运行的所有任务记录到 job_run_details 表中。值为 on 或 off。 |
cron.log_statement | 在运行所有 cron 语句之前将其记入日志。值为 on 或 off。 |
cron.max_running_jobs | |
cron.use_background_workers | 使用后台工作程序而不是客户端会话。您无法修改此值。 |
postgres=> SELECT name, setting, short_desc FROM pg_settings WHERE name LIKE 'cron.%' ORDER BY name;
本页内容是否解决了您的问题?