Job control in sql

From: Svenne Krap <svenne(dot)lists(at)krap(dot)dk>
To: "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org>
Subject: Job control in sql
Date: 2012-05-25 08:28:03
Message-ID: 4FBF4293.4090902@krap.dk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Hi.

I am building a system, where we have jobs that run at different times
(and takes widely different lengths of time).

Basically I have a jobs table:

create table jobs(
id serial,
ready boolean,
job_begun timestamptz,
job_done timestamptz,
primary key (id)
);

This should run by cron, at it is my intention that the cronjob
(basically) consists of
/
psql -c "select run_jobs()"/

My problem is, that the job should ensure that it is not running
already, which would be to set job_begun when the job starts". That can
easily happen as jobs should be started every 15 minutes (to lower
latency from ready to done) but some jobs can run for hours..

The problem is that a later run of run_jobs() will not see the job_begun
has been set by a prior run (that is unfinished - as all queries from
the plpgsql-function runs in a single, huge transaction).

My intitial idea was to set the isolation level to "read uncommitted"
while doing the is-somebody-else-running-lookup, but I cannot change
that in the plpgsql function (it complains that the session has to be
empty - even when I have run nothing before it).

Any ideas on how to solve the issue?

I run it on Pgsql 9.1.

Svenne

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message danycxxx 2012-05-25 09:03:41 Select row cells as new columns
Previous Message Raj Mathur ( राज =?utf-8?b?IOCkruCkvuCkpeClgeCksA==?=) 2012-05-25 05:50:45 Re: Flatten table using timestamp and source