PostgreSQL中IPv4地址的正确数据类型是什么?
我听说过inet,但从来没有用过。
我需要像SELECT ... WHERE ip = '99.88.99.88'一样执行SELECT查询,它应该支持人类可读格式的输出(人类可读,我指的是'99.88.99.88')。
如果能够通过这些子网对IP地址执行SELECT操作,那就太好了。
感谢您提前给我们提建议!
发布于 2013-03-13 19:42:08
内置的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类型提供了有限的索引支持;具体地说,至少在地址为常量的情况下,'address in range‘类型的查询被转换为范围查询。参见this (rather old) thread。
另请参阅Chris's point re ip4r。
发布于 2013-03-13 19:39:53
http://www.postgresql.org/docs/current/static/datatype-net-types.html有inet类型的字段,它只是你需要的。
对运算符<<、<<=、>>和>>=进行子网包含测试。
发布于 2013-03-13 20:32:38
我想补充的是,内置类型非常强大,这就是您应该开始的地方。但是,如果您需要GIN索引,请查看http://pgfoundry.org/projects/ip4r/
ip4r的一个例子(我为什么开始使用它)可能是您需要存储CIDR块,并确保块不包含任何其他块。因为这需要GIN索引,所以你必须使用ip4r而不是内置类型。
https://stackoverflow.com/questions/15384179
复制相似问题