Tengo esta consulta en sqlserver con 2 tablas (una contiene una lista de empresas, la segunda contiene una lista de editores)
with edges as ( select t1.company as node1, t2.company as node2 from table1 t1 join table1 t2 on t1.publisher = t2.publisher ), cte as ( select e.node1, e.node2, cast('|'+e.node1+'|'+e.node2+'|' as varchar(max)) as nodes, 1 as level from edges e union all select c.node1, e.node2, c.nodes+e.node2+'|', 1+c.level from cte c join edges e on c.node2 = e.node1 and c.nodes not like '|%'+e.node2+'%|' ), nodes as ( select node1, (case when min(node2) < node1 then min(node2) else node1 end ) as grp from cte group by node1 ) select t.company, t.publisher, grp.GroupId from table1 t join (select n.node1, dense_rank() over (order by grp) as GroupId from nodes n ) grp on t.company = grp.node1;Debería convertir esta consulta sqlserver en postgres