2010-12-13 31 views
5

Tôi cố gắng để tái tạo (một mininimal) chức năng crontab trong một bảng cơ sở dữ liệu postgresql với ngữ nghĩa crontab-like như sau dưới đây (chỉ số không hiển thị, cho simiplicity):truy vấn chạy theo định kỳ (ala crontab) từ một cơ sở dữ liệu 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 
); 

Tôi chỉ có thiết kế lược đồ. Tôi muốn một số ý tưởng về cách tôi có thể thực hiện điều này. Đặc biệt, làm thế nào để thực hiện:

  1. Các 'bỏ phiếu định kỳ' của bảng lịch
  2. Làm thế nào để xác định lịch trình được chạy

Liệu postgresql có bất kỳ bản địa (inbuilt) chức năng mà tôi có thể xây dựng để đạt được hành vi này?

Trả lời

8

pgAgent sẽ thực hiện công việc. Một thiết lập hoàn chỉnh có thể được tìm thấy tại Postgresonline.com.

+0

+1 Nó thậm chí sử dụng một sử dụng một [định dạng cron-style] (http://www.pgadmin.org/docs/1.4/pgagent-schedules.html) –

+0

tôi quyết định 'roll của riêng tôi' vì pgAgent là quá mức cần thiết cho những gì tôi muốn. Tuy nhiên, tôi sẽ chấp nhận điều này như là một câu trả lời, bởi vì nó đặt tôi trên con đường bên phải – skyeagle

+0

@skyeagle, tôi rất thích nhìn thấy phiên bản của bạn của pgAgent, u đã làm cho nó với pgsql hoặc một ngôn ngữ kịch bản khác nhau? – indago

1

Tôi đã sử dụng psql + crontab cho nó. Như thế này:

Mục nhập crontab này sẽ xóa nội dung cũ hơn 60 ngày trên cơ sở luân phiên.

0 16 * * * PGPASSWORD=mypassword psql -Umyuser -dmyschema -c "delete from mytable where created_at < now() - interval '60 days'" 
Các vấn đề liên quan