You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确查询PostgreSQL的CIDR列以避免匹配遗漏?

PostgreSQL CIDR 查询问题解析

问题根源

你之前使用>>操作符失效,是因为这个操作符表示严格包含——只有当记录的network是目标CIDR的超集且两者不相等时,才会返回true。当network和目标CIDR完全相等(比如都是同一个/32的IPv4或/128的IPv6),>>会返回false,导致精确匹配的情况被遗漏。

现有查询的有效性分析

你现在的查询语句:

SELECT * FROM public.ip_addresses ips  WHERE ips.network >>= '108.61.214.189'::CIDR OR ips.network <<= '108.61.214.189'::CIDR

是否全面,取决于你的实际需求:

  • 如果需要匹配所有与目标CIDR存在包含关系(记录包含目标/目标包含记录)或完全相等的记录,这个查询是完全覆盖的:
    • >>=:匹配记录network包含或等于目标CIDR的情况
    • <<=:匹配记录network被目标CIDR包含或等于的情况
  • 如果你的需求只是找出所有包含目标IP(含记录network就是目标IP本身)的记录,那么只需要ips.network >>= '108.61.214.189'::CIDR就足够了,<<=分支是多余的——因为当目标是单个IP(自动转为/32或/128的CIDR)时,<<=只会匹配记录network和目标完全相等的情况,而这已经被>>=覆盖。

额外场景建议

如果你的需求是匹配所有与目标CIDR有交集的记录(不仅仅是包含关系),比如两个部分重叠的子网,那么需要改用&&操作符(表示“重叠/有交集”):

SELECT * FROM public.ip_addresses ips WHERE ips.network && '108.61.214.189'::CIDR

内容的提问来源于stack exchange,提问作者Rami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:55:36