Verbundene Sätze von Knoten / Kanten zusammenfassen

Ich habe eine Reihe verbundener Kanten mit eindeutigen Knoten. Sie sind über einen übergeordneten Knoten verbunden. Betrachten Sie den folgenden Beispielcode und die folgende Abbildung:

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);

Visuell können zwei Gruppen von Kanten identifiziert werden. Wie können die beiden Gruppen mit PostgreSQL 9.1 und @ identifiziert werdelength summiert? Das erwartete Ergebnis wird angezeigt:

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

Ich weiß nicht mal, wo ich anfangen soll. Benötige ich eine benutzerdefinierte Aggregat- oder Fensterfunktion? Könnte ich @ verwendWITH RECURSIVE um iterativ Kanten zu sammeln, die verbinden? Mein realer Fall ist ein Stream-Netzwerk mit 245.000 Rändern. Ich erwarte die maximale Anzahl vonedges_in_group auf weniger als 200 und ein paar hundert aggregierte Gruppen (Zeilen).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage