inet: Alle vorhandenen Subnets

Hi pg-forum!

Ich habe folgendes Problem: Ich habe eine Tabelle mit einer Menge IP-Adressen vom
Typ inet und ein paar anderen Spalten. Jetzt suche ich nach einer Anfrage, die mir die einzelnen Subnetze zurückgibt. Ich versuchs mal beispielhaft:

Ich möchte zum Beispiel alle vorhandenen Subnetze im Netz 144.44.x.y Wir haben also zum Beispiel eine Tabelle mit 4 Einträgen wie folgt:

address inet
144.44.1.1
144.44.1.23
144.44.1.42
144.44.3.55

Dann soll das Ergebnis meiner Anfrage sein, die einzelnen Subnetze und wieviele IPs sich in der Tabelle in den jeweiligen Subnetzen befinden.

144.44.1 1
144.44.3 3

Leider habe ich so gar keine Idee wie das gehen soll. Müsste man eventuell sogar eine verschachtelte Anfrage stellen? Alle meine Gehversuche mit den Möglichkeiten von inet
sind leider bisher uach fehlgeschlagen…

Danke für eure Hilfe!

Gruß,
orkano

Es gibt eine Reihe von Funktionen, die dir diese Arbeit abnehmen können:

PostgreSQL: Documentation: Manuals: PostgreSQL 9.0: Network Address Functions and Operators

Was davon hast du schon probiert, und vor allem mit welchem Ergebnis?

Wenn Du die Funktionen von PostgreSQL 9 mangels 9er Version nicht nehmen kannst (keine Ahnung grad, seit wann es die gibt), kriegst Du das auch locker mit Zeichenkettenoperationen hin: Zeichenkettenfunktionen und -operatoren

cu jth

Aus Deinen Daten geht nicht hervor, was das für ein Netz jeweil sein soll. Soll es ein /24 sein? Oder darf es ein /16 oder /8 sein? Oder was dazwischen?

144.44.1 1
144.44.3 3

Das paßt ned so ganz zu Deinen Daten. Du willst ja offensichtlich /24 wissen, also:

test=*# select * from net;
   address
-------------
 144.44.1.1
 144.44.1.23
 144.44.1.42
 144.44.3.55
(4 Zeilen)

Zeit: 0,189 ms
test=*# select network(set_masklen(address,24)), count(1) from net group by 1;
    network    | count
---------------+-------
 144.44.1.0/24 |     3
 144.44.3.0/24 |     1
(2 Zeilen)



Leider habe ich so gar keine Idee wie das gehen soll. Müsste man eventuell sogar eine verschachtelte Anfrage stellen? Alle meine Gehversuche mit den Möglichkeiten von inet
sind leider bisher uach fehlgeschlagen…

Welche Gehversuche?

Andreas