2013-03-13 16 views
7

Jaki jest poprawny typ danych dla adresów IPv4 w PostgreSQL?Typ danych pola PostgreSQL dla adresów IPv4

Słyszałem o inet, ale nigdy z niego nie korzystałem.

Muszę wykonać kwerendy takie jak , takie jak SELECT ... WHERE ip = '99.88.99.88' i powinny one obsługiwać dane wyjściowe w formacie czytelnym dla człowieka (czytelny dla człowieka to znaczy "99.88.99.88").

Byłoby miło mieć zdolność do SELECT adresów IP przez tam podsieci.

Dzięki za wszelkie sugestie z góry!

Odpowiedz

15

Wbudowany cidr i inet typów będą robić co chcesz i zapewnienie odpowiedniego operatora:

regress=> SELECT '192.168.1.19'::inet << '192.168.1.0/24'::cidr; 
?column? 
---------- 
t 
(1 row) 

zobacz dokumentację PostgreSQL na network datatype operators and functions i na network datatypes.

Ograniczona obsługa indeksów dla typów cidr i inet; w szczególności kwerendy typu "address in range" są przekształcane w zapytania o zakres przynajmniej wtedy, gdy adres jest stały. Zobacz this (rather old) thread.

Zobacz także punkt Chrisa ponownie ip4r.

4

Chcę dodać, że wbudowane typy są dość potężne i właśnie tam należy zacząć. Jeśli jednak potrzebujesz indeksowania GIN, sprawdź: http://pgfoundry.org/projects/ip4r/

Przypadku dla ip4r (dlaczego zacząłem go używać) może być, jeśli potrzebujesz przechowywać bloki CIDR i upewnij się, że żaden blok nie zawiera żadnego innego bloku. Ponieważ wymaga to indeksowania GIN, musisz użyć ip4r zamiast wbudowanych typów.

+0

Dzięki! Myślałem, że istnieją indeksy GIN lub GiST dla zakresów IP, ale nie znalazłem ich w szybkim wyszukiwaniu. –

+0

Odkryłem na własnej skórze (próbując użyć ograniczeń wykluczających), że GIN nie był obsługiwany i został doprowadzony do ip4r przez autora. –

Powiązane problemy