简体   繁体   English

如何通过脚本/命令行安排pgagent作业

[英]how to schedule a pgagent job through scripts/commandLine

I want to run jobs through PgAgent. 我想通过PgAgent运行作业。

I am able to do that by creating a job in PgAgentJob through PgAdmin UI, as described here https://www.pgadmin.org/docs/pgadmin4/dev/pgagent_jobs.html . 我可以通过PgAdmin UI在PgAgentJob中创建作业来做到这一点,如此处https://www.pgadmin.org/docs/pgadmin4/dev/pgagent_jobs.html所述

But I want to use a sql script that can create a PgAgent job as we do in Oracle. 但是我想使用一个可以像在Oracle中一样创建PgAgent作业的sql脚本。 Please suggest how I can achieve this. 请提出如何实现这一目标。

To create a job in pgAgent use something like the following INSERT STATEMENTS (for a Routine Maintenance job) : 要在pgAgent中创建作业,请使用以下INSERT STATEMENTS (用于Routine Maintenance作业):

INSERT INTO pgagent.pga_job (jobid, jobjclid, jobname, jobdesc, jobenabled, jobhostagent)
SELECT jcl.jclid, 'MyJob', '', true, ''
FROM pgagent.pga_jobclass jcl WHERE jclname='Routine Maintenance';

To add a step to this job, which executes a SQL command ( 'delete from test where user_name=''test''; ), use the following command: 要向该作业添加执行SQL命令的步骤( 'delete from test where user_name=''test''; ),请使用以下命令:

INSERT INTO pgagent.pga_jobstep (jstjobid, jstname, jstdesc, jstenabled, jstkind, jstonerror, jstcode, jstdbname, jstconnstr)
 SELECT (SELECT jobid 
         FROM pgagent.pga_job
         WHERE jobname = 'MyJob'), 'MyStep', '', true, 's', 'f', 'delete from test where user_name=''test'';', 'postgres', '';

To create a schedule for this job (every day at 08:45), use the following command: 要为此作业创建时间表(每天08:45),请使用以下命令:

INSERT INTO pgagent.pga_schedule (jscjobid, jscname, jscdesc, jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths, jscenabled, jscstart, jscend)
VALUES((SELECT jobid 
FROM pgagent.pga_job
WHERE jobname = 'MyJob'), 'MySchedule', '', '{f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,t,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', 
'{f,f,f,f,f,f,f,f,t,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f}', '{t,t,t,t,t,t,t}', '{t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t}', 
'{t,t,t,t,t,t,t,t,t,t,t,t}', true, '2018-07-16 00:00:00', NULL);

Here a graphical representation of this schedule: 这里是该时间表的图形表示:

在此处输入图片说明

Here you can see a complete summary of these commands inside an anonymous block (generated by pgAdmin): 在这里,您可以在匿名块(由pgAdmin生成)中看到这些命令的完整摘要:

DO $$
DECLARE
    jid integer;
    scid integer;
BEGIN
-- Creating a new job
INSERT INTO pgagent.pga_job(
    jobjclid, jobname, jobdesc, jobhostagent, jobenabled
) VALUES (
    1::integer, 'MyJob'::text, ''::text, ''::text, true
) RETURNING jobid INTO jid;

-- Steps
-- Inserting a step (jobid: NULL)
INSERT INTO pgagent.pga_jobstep (
    jstjobid, jstname, jstenabled, jstkind,
    jstconnstr, jstdbname, jstonerror,
    jstcode, jstdesc
) VALUES (
    jid, 'MyStep'::text, true, 's'::character(1),
    ''::text, 'postgres'::name, 'f'::character(1),
    'delete from test where user_name=''test'';'::text, ''::text
) ;

-- Schedules
-- Inserting a schedule
INSERT INTO pgagent.pga_schedule(
    jscjobid, jscname, jscdesc, jscenabled,
    jscstart,     jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths
) VALUES (
    jid, 'MySchedule'::text, ''::text, true,
    '2018-07-16 00:00:00+02'::timestamp with time zone, 
    -- Minutes
    ARRAY[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false]::boolean[],
    -- Hours
    ARRAY[false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]::boolean[],
    -- Week days
    ARRAY[true, true, true, true, true, true, true]::boolean[],
    -- Month days
    ARRAY[true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]::boolean[],
    -- Months
    ARRAY[true, true, true, true, true, true, true, true, true, true, true, true]::boolean[]
) RETURNING jscid INTO scid;
END
$$;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM