PostgreSQL中IPv4地址的正确数据类型是什么?
我听说过inet
,但从未使用过它。
我需要执行SELECT
这样的SELECT ... WHERE ip = '99.88.99.88'
查询,它应该支持人类可读格式的输出(人类可读,我的意思是'99 .88.99.88')。
通过子网拥有SELECT
IP地址的能力会很高兴。
提前感谢您的任何建议!
答案 0 :(得分:16)
内置的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。
另见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; =测试是否包含子网。