用于IPv4地址的PostgreSQL字段数据类型

时间:2013-03-13 11:35:57

标签: sql postgresql ip

PostgreSQL中IPv4地址的正确数据类型是什么?

我听说过inet,但从未使用过它。

我需要执行SELECT这样的SELECT ... WHERE ip = '99.88.99.88'查询,它应该支持人类可读格式的输出(人类可读,我的意思是'99 .88.99.88')。

通过子网拥有SELECT IP地址的能力会很高兴。

提前感谢您的任何建议!

3 个答案:

答案 0 :(得分:16)

内置的cidrinet类型可以满足您的需求,并提供合适的运营商:

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

请参阅network datatype operators and functionsnetwork datatypes上的PostgreSQL文档。

cidrinet类型提供了有限索引支持;特别是,“范围内地址”类型查询至少在地址为常量的情况下变为范围查询。请参阅this (rather old) thread

另见Chris的重点ip4r

答案 1 :(得分:4)

我想补充一点,内置类型非常强大,那就是你应该开始的地方。但是,如果您需要GIN索引,请查看http://pgfoundry.org/projects/ip4r/

ip4r的一个案例(为什么我开始使用它)可能是你需要存储CIDR块并确保没有块包含任何其他块。由于这需要GIN索引,因此必须使用ip4r而不是内置类型。

答案 2 :(得分:3)

http://www.postgresql.org/docs/current/static/datatype-net-types.html具有inet类型的字段只是您需要的字段。

  

运算符&lt;&lt ;,&lt;&lt; =,&gt;&gt;和&gt;&gt; =测试是否包含子网。