Agregando conjuntos conectados de nodos / aristas

Tengo un conjunto de bordes conectados con nodos únicos. Están conectados mediante un nodo principal. Considere el siguiente ejemplo de código e ilustración:

CREATE TABLE network (
  node integer PRIMARY KEY,
  parent integer REFERENCES network(node),
  length numeric NOT NULL
);
CREATE INDEX ON network (parent);
INSERT INTO network (node, parent, length) VALUES
  (1, NULL, 1.3),
  (2, 1, 1.2),
  (3, 2, 0.9),
  (4, 3, 1.4),
  (5, 4, 1.6),
  (6, 2, 1.5),
  (7, NULL, 1.0);

Visualmente, se pueden identificar dos grupos de bordes. ¿Cómo se pueden identificar los dos grupos usando PostgreSQL 9.1 ylength sumado? Se muestra el resultado esperado:

 edges_in_group | total_edges | total_length
----------------+-------------+--------------
 {1,2,3,4,5,6}  |           6 |          7.9
 {7}            |           1 |          1.0
(2 rows)

Ni siquiera sé por dónde empezar. ¿Necesito un agregado personalizado o una función de ventana? Podría usarWITH RECURSIVE para recoger de forma iterativa los bordes que se conectan? Mi caso del mundo real es una red de flujo de 245,000 bordes. Espero el número máximo deedges_in_group ser inferior a 200 y un par de cientos de grupos agregados (filas).

Respuestas a la pregunta(1)

Su respuesta a la pregunta