2013-03-13 5 views
7

PostgreSQLのIPv4アドレスの正しいデータタイプは何ですか?PostgreSQLのIPv4アドレスのフィールドデータタイプ

inetと聞いたことがあります。

SELECT ... WHERE ip = '99.88.99.88'のようなSELECTのクエリを実行する必要があります。人間が判読可能な形式(人間が判読できる形で'99 .88.99.88 'を意味します)の出力をサポートする必要があります。

サブネットによってIPアドレスがSELECTになるのはうれしいことです。

事前にお寄せいただきありがとうございます。

答えて

15

cidrを内蔵しており、inet種類は、あなたがやりたいことと、適切な演算子を提供します:

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

network datatype operators and functions上とnetwork datatypes上のPostgreSQLのドキュメントを参照してください。

cidrおよびinetタイプのインデックスが制限されています。特に、 '範囲内のアドレス'タイプのクエリは、少なくともアドレスが定数である範囲クエリに変換されます。 this (rather old) threadを参照してください。

クリスのポイントre ip4rも参照してください。

4

組み込みの型が非常に強力であることを付け加えたいと思います。しかし、GINのインデックス作成が必要な場合は、http://pgfoundry.org/projects/ip4r/

CIDRブロックを保存し、他のブロックが含まれていないことを確認してください。これにはGINの索引付けが必要なので、組み込み型ではなくip4rを使う必要があります。

+0

ありがとうございます! IP範囲のGINまたはGiSTインデックスがあると思っていましたが、クイック検索でそれらを見つけられませんでした。 –

+0

私は、GINがサポートされておらず、作者によってip4rに導かれたという難しい方法(除外制約を使用しようとしている)を発見しました。 –

関連する問題