9

PostgreSQL の IPv4 アドレスの正しいデータ型は何ですか?

について聞いinetたことがありますが、使用したことはありません。

私は次のSELECTようなクエリを実行する必要がありSELECT ... WHERE ip = '99.88.99.88'、人間が読める形式の出力をサポートする必要があります(人間が読める形式とは、「99.88.99.88」を意味します)。

SELECTサブネットごとに IP アドレスを取得できると便利です。

事前にご提案いただきありがとうございます。

4

3 に答える 3

17

組み込み型cidrinet型は、あなたが望むことを行い、適切な演算子を提供します:

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

ネットワーク データ型の演算子と関数、およびネットワークデータ型については、PostgreSQL のドキュメントを参照してください。

cidrおよびタイプに対しては限定的なインデックスのサポートが提供されinetます。特に、「範囲内のアドレス」タイプのクエリは、少なくともアドレスが定数である範囲クエリに変換されます。この(かなり古い)スレッドを参照してください。

Chris のポイント re も参照してくださいip4r

于 2013-03-13T11:42:08.013 に答える
4

組み込み型は非常に強力であり、そこから始めるべきであることを付け加えたいと思います。ただし、GINインデックスが必要な場合は、http://pgfoundry.org/projects/ip4r/を確認してください。

ip4rの場合(私がそれを使い始めた理由)は、CIDRブロックを格納し、他のブロックがブロックに含まれていないことを確認する必要がある場合です。これにはGINインデックスが必要なため、組み込み型ではなくip4rを使用する必要があります。

于 2013-03-13T12:32:37.663 に答える
4

http://www.postgresql.org/docs/current/static/datatype-net-types.htmlタイプのフィールドがあるのinetは、必要なものだけです。

演算子<<、<< =、>>、および>> =は、サブネットの包含をテストします。

于 2013-03-13T11:39:52.600 に答える