2010-12-13 4 views
5

Ich versuche, (eine mininimal) crontab Funktionalität in einer PostgreSQL-Datenbank-Tabelle mit crontab-ähnlicher Semantik zu replizieren, wie unten folgt (Indizes nicht gezeigt, für simiplicity):laufen Abfragen in regelmäßigen Abständen (ala crontab) aus einer PostgreSQL-Datenbank

create table schedule (
id int not null primary key, 
command text 
); 

create table schedule_detail(
schedule_id int not null references schedule(id), 
sd_minute smallint not null, 
sd_hour smallint not null, 
sd_day smallint not null, 
sd_month smallint not null, 
sd_year smallint not null, 
sd_dayofweek smallint not null 
); 

Ich bin nur so weit wie das Schema Design. Ich hätte gerne Ideen, wie ich das umsetzen kann. Insbesondere, wie zu implementieren:

  1. Die ‚periodische Abfrage‘ des Plantabelle
  2. Wie zu bestimmen, welcher Zeitplan

Hat postgresql jede nativen (eingebaute) Funktionalität ausgeführt wird, dass ich kann darauf aufbauen, um dieses Verhalten zu erreichen?

Antwort

8

pgAgent wird die Aufgabe erledigen. Ein komplettes Setup finden Sie unter .

+0

+1 Es verwendet auch ein verwendet ein [cron-Stil-Format] (http://www.pgadmin.org/docs/1.4/pgagent-schedules.html) –

+0

Ich beschloss, 'meine eigene Rolle' seit pgAgent ist Overkill für das, was ich will. Trotzdem akzeptiere ich das als Antwort, weil es mich auf den richtigen Weg brachte – skyeagle

+0

@skyeagle, ich würde gerne Ihre Version von pgAgent sehen, haben Sie es mit pgsql oder einer anderen Skriptsprache gemacht? – indago

1

Ich habe psql + crontab dafür verwendet. So geht's:

Dieser crontab-Eintrag löscht Inhalte, die älter als 60 Tage sind, rollend.

0 16 * * * PGPASSWORD=mypassword psql -Umyuser -dmyschema -c "delete from mytable where created_at < now() - interval '60 days'" 
Verwandte Themen