-- broker.broker_schedule -- Stores scheduled jobs (cron-like functionality). CREATE TABLE IF NOT EXISTS broker.broker_schedule ( id_broker_schedule BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE, cron_expr VARCHAR(100) NOT NULL, enabled BOOLEAN NOT NULL DEFAULT true, job_name VARCHAR(255) NOT NULL, job_priority INTEGER NOT NULL DEFAULT 0, job_queue INTEGER NOT NULL DEFAULT 1, job_language VARCHAR(50) NOT NULL DEFAULT 'sql', execute_str TEXT NOT NULL, run_as VARCHAR(100), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), last_run_at TIMESTAMP WITH TIME ZONE, next_run_at TIMESTAMP WITH TIME ZONE, CONSTRAINT broker_schedule_job_queue_check CHECK (job_queue > 0) ); CREATE INDEX IF NOT EXISTS idx_broker_schedule_enabled ON broker.broker_schedule(enabled); CREATE INDEX IF NOT EXISTS idx_broker_schedule_next_run ON broker.broker_schedule(next_run_at) WHERE enabled = true; CREATE INDEX IF NOT EXISTS idx_broker_schedule_name ON broker.broker_schedule(name); COMMENT ON TABLE broker.broker_schedule IS 'Scheduled jobs (cron-like functionality)'; CREATE OR REPLACE FUNCTION broker.tf_broker_schedule_update_timestamp() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; DROP TRIGGER IF EXISTS t_broker_schedule_updated_at ON broker.broker_schedule; CREATE TRIGGER t_broker_schedule_updated_at BEFORE UPDATE ON broker.broker_schedule FOR EACH ROW EXECUTE FUNCTION broker.tf_broker_schedule_update_timestamp();