2010-12-13 14 views
5

Estoy tratando de replicar (un mininimal) funcionalidad crontab en una tabla de base de datos PostgreSQL con la semántica crontab-como la siguiente manera abajo (índices que no se muestra, por simiplicity):consultas ejecutar periódicamente (crontab ala) a partir de una base de datos PostgreSQL

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 
); 

Solo he llegado al diseño del esquema. Me gustaría algunas ideas sobre cómo puedo implementar esto. En particular, la forma de aplicar:

  1. El 'sondeo periódico' de la tabla de programación
  2. Cómo determinar qué horario que se ejecuta PostgreSQL tiene ningún nativo funcionalidad

(incorporado) que yo puede construir sobre para lograr este comportamiento?

Respuesta

8

pgAgent hará el trabajo. Se puede encontrar una configuración completa en Postgresonline.com.

+0

+1 Incluso se utiliza un utiliza un [formato de estilo cron] (http://www.pgadmin.org/docs/1.4/pgagent-schedules.html) –

+0

decidí 'rodar mi propio' ya que pgAgent es excesivo para lo que quiero. Aún así, aceptaré esto como una respuesta, porque me puso en el camino correcto – skyeagle

+0

@skyeagle, me encantaría ver su versión de pgAgent, ¿lo hizo con pgsql o un lenguaje de scripting diferente? – indago

1

He estado usando psql + crontab para ello. De esta manera:

Esta entrada de crontab eliminará contenido de más de 60 días en forma continua.

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