使用 pgagent 以编程方式创建作业和计划

发布于 2024-10-07 21:57:22 字数 328 浏览 7 评论 0原文

有没有办法以编程方式在 pgagent 中创建和管理作业/计划,即不使用 pgAdmin ?

我怀疑可能有一种方法可以通过使用 libpq 编写 postgres 客户端来做到这一点(以防 pgagent 不支持开箱即用的这种行为) - 但我不知道如何去做 - 如果我需要继续下去为作业/计划 CRUD 功能编写我自己的 API 的大致过程。

所以基本上我问两个问题:

  • 有没有办法以编程方式在 pagent 中创建/管理作业和日程安排?
  • 如果不是,对于上述问题,我需要连接 pagagent 代码的哪些部分才能提供我自己的作业/计划 CRUD 功能?

Is there a way to create and manage jobs/schedules in pgagent programmatically, i.e. WITHOUT using pgAdmin ?

I suspect there may be a way of doing this by writing a postgres client using libpq (in case pgagent does not support this behavior out of the box) - but I am not sure how to go about it - if I need to go down the rought of writing my OWN API for job/schedule CRUD functionality.

So basically I am asking two questions:

  • is there a way to create/administer jobs and schedules in pagent programmatically?
  • If no, to the above question, which parts of the pagagent code do I need to hook into in order to provide my own job/schedule CRUD functionality?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你另情深 2024-10-14 21:57:22

下面将创建一个每分钟运行的作业,其中一个步骤调用一些 SQL:

do $
declare
    job_id int;
begin

    /* add a job and get its id: */
    insert into 
        pgagent.pga_job (jobjclid, jobname) 
    values 
        (1 /*1=Routine Maintenance*/, 'my job name') 
    returning 
        jobid 
    into 
        job_id;


    /* add a step to the job: */
    insert into 
        pgagent.pga_jobstep (jstjobid, jstname, jstkind, jstcode, jstdbname) 
    values 
        (
            job_id, 
            'my step name', 
            's',                    /* sql step */
            'select * from thing',  /* the sql to run */
            'mydb'                  /* the name of the database to run the step against */
        );


    /* add a schedule to the job. This one runs every minute: */
    insert into 
        pgagent.pga_schedule (jscjobid, jscname) 
    values 
        (job_id, 'my schedule name');

end $;

The below will create a job that runs every minute, with a step that calls some SQL:

do $
declare
    job_id int;
begin

    /* add a job and get its id: */
    insert into 
        pgagent.pga_job (jobjclid, jobname) 
    values 
        (1 /*1=Routine Maintenance*/, 'my job name') 
    returning 
        jobid 
    into 
        job_id;


    /* add a step to the job: */
    insert into 
        pgagent.pga_jobstep (jstjobid, jstname, jstkind, jstcode, jstdbname) 
    values 
        (
            job_id, 
            'my step name', 
            's',                    /* sql step */
            'select * from thing',  /* the sql to run */
            'mydb'                  /* the name of the database to run the step against */
        );


    /* add a schedule to the job. This one runs every minute: */
    insert into 
        pgagent.pga_schedule (jscjobid, jscname) 
    values 
        (job_id, 'my schedule name');

end $;
不奢求什么 2024-10-14 21:57:22

pgAdmin 只是创建一些 SQL 语句,仅此而已。任何可以连接到数据库“postgres”并有权使用 pgAgent 架构和表的应用程序都可以管理 pgAgent 的作业和计划。这只是 SQL。

pgAdmin just creates some SQL statements, that's it. Any application that can connect to the database "postgres" and has the privileges to use the pgAgent schema and tables, can manage the jobs and schedules for pgAgent. It's just SQL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文