postgresql7.1 select package_id from apm_packages p right outer join ( WITH RECURSIVE site_node_tree AS ( select node_id, parent_id, object_id from site_nodes where node_id = :root_id UNION ALL select c.node_id, c.parent_id, c.object_id from site_node_tree tree, site_nodes as c where c.parent_id = tree.node_id ) select * from site_node_tree n) site_map on site_map.object_id = p.package_id where package_key = 'news' and (site_map.object_id is null or acs_permission__permission_p(site_map.object_id, :user_id, 'read') = 't')