PostgreSQL中IPv4地址的字段数据类型

11

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

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

我需要执行类似于 SELECT ... WHERE ip = '99.88.99.88'SELECT查询,并且它应该支持人类可读格式的输出(通过人类可读格式,我指的是“99.88.99.88”)。

能够按子网选择IP地址将是不错的功能。

提前感谢您的任何建议!

3个回答

19
内置的cidrinet类型将实现您想要的功能,并提供适当的运算符:
regress=> SELECT '192.168.1.19'::inet << '192.168.1.0/24'::cidr;
 ?column? 
----------
 t
(1 row)

请参阅 PostgreSQL 文档中的 网络数据类型运算符和函数网络数据类型
对于 cidrinet 类型,提供了有限的索引支持;特别是,“范围内地址”类型查询至少在地址为常量时被转换为范围查询。请参见 此(相当古老的)主题讨论
还请注意 Chris 关于 ip4r 的观点。

4

4
我想补充的是,内置类型非常强大,这也是你应该开始使用的地方。但是如果你需要GIN索引,请查看http://pgfoundry.org/projects/ip4r/
ip4r的使用情况(为什么我开始使用它)可能是,如果您需要存储CIDR块并确保没有一个块包含任何其他块,则必须使用ip4r而不是内置类型,因为这需要GIN索引。

谢谢!我以为有针对IP范围的GIN或GiST索引,但在快速搜索中没有找到。 - Craig Ringer
我通过尝试使用排除约束条件的方式发现GIN不受支持,并被作者引导使用ip4r。 - Chris Travers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接