2013-03-13 75 views
7

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

我听说inet,但从来没有使用它。

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

很高兴能有SELECT IP地址在那里子网。

感谢您提前提出任何建议!

回答

15

内置cidrinet类型会做你想要什么,并提供合适的运营商:

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文档。

cidrinet类型提供了有限的索引支持;特别是'范围内的地址'类型查询至少在地址是常量的地方变成范围查询。见this (rather old) thread

另请参阅克里斯的点ip4r

4

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

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

+0

谢谢!我认为有IP范围的GIN或GiST索引,但没有在快速搜索中找到它们。 – 2013-03-13 12:38:26

+0

我发现困难的方式(尝试使用排除约束)GIN不被支持,并被作者引向ip4r。 – 2013-03-13 12:45:40