CREATE VIEW fullActiveQueries AS SELECT DISTINCT q.id, q.type, q.activeVersion, q.latestVersion, coalesce(c.config, null) as config, ARRAY_AGG(DISTINCT r.requiredQueryId)::uuid[] as requiredIds FROM queries AS q LEFT JOIN queryConfigs AS c ON q.id = c.queryId and q.activeVersion >= c.addedVersion and q.activeVersion < COALESCE(c.removedVersion, q.activeVersion + 1) LEFT JOIN requiredQueries AS r ON q.id = r.queryId and q.activeVersion >= r.addedVersion and q.activeVersion < COALESCE(r.removedVersion, q.activeVersion + 1) GROUP BY q.id, q.type, q.activeversion, q.latestversion, c.config; CREATE VIEW queryActiveDependencies AS WITH RECURSIVE queryActiveDependencies AS ( SELECT q.id, r.requiredQueryId FROM queries AS q LEFT JOIN requiredQueries AS r ON q.id = r.queryId and q.activeVersion >= r.addedVersion and q.activeVersion < COALESCE(r.removedVersion, q.activeVersion + 1) UNION ALL SELECT qd.id, r.requiredQueryId FROM queries AS q LEFT JOIN requiredQueries AS r ON q.id = r.queryId and q.activeVersion >= r.addedVersion and q.activeVersion < COALESCE(r.removedVersion, q.activeVersion + 1) JOIN queryActiveDependencies as qd on q.id = qd.requiredQueryId ) SELECT DISTINCT id, requiredQueryId FROM queryActiveDependencies;