-- broker.broker_job_dependency -- Replaces the old broker_jobs.depends_on text[] column: job_id is only -- claimable once every row it depends on has complete_status = 2 (completed). CREATE TABLE IF NOT EXISTS broker.broker_job_dependency ( job_id BIGINT NOT NULL REFERENCES broker.broker_jobs(id_broker_jobs) ON DELETE CASCADE, depends_on_job_id BIGINT NOT NULL REFERENCES broker.broker_jobs(id_broker_jobs) ON DELETE CASCADE, tenant_id TEXT NOT NULL DEFAULT 'default', created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), PRIMARY KEY (job_id, depends_on_job_id), CHECK (job_id <> depends_on_job_id) ); CREATE INDEX IF NOT EXISTS idx_broker_job_dependency_reverse ON broker.broker_job_dependency (depends_on_job_id, job_id); CREATE INDEX IF NOT EXISTS idx_broker_job_dependency_tenant ON broker.broker_job_dependency (tenant_id); COMMENT ON TABLE broker.broker_job_dependency IS 'job_id is not claimable until every depends_on_job_id row has complete_status = 2 (completed)'; ALTER TABLE broker.broker_job_dependency ENABLE ROW LEVEL SECURITY; ALTER TABLE broker.broker_job_dependency FORCE ROW LEVEL SECURITY; DROP POLICY IF EXISTS broker_job_dependency_tenant_isolation ON broker.broker_job_dependency; CREATE POLICY broker_job_dependency_tenant_isolation ON broker.broker_job_dependency USING (tenant_id = COALESCE(NULLIF(current_setting('broker.tenant_id', true), ''), 'default')) WITH CHECK (tenant_id = COALESCE(NULLIF(current_setting('broker.tenant_id', true), ''), 'default'));