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

PostgreSQL查询172.24.12.xxx段IP失败,求排查错误原因

问题分析与解决方案

你的核心错误是混淆了正则表达式语法和PostgreSQL inet类型的输入规则:

  • inet类型仅接受合法的IP地址或CIDR网段格式(比如172.24.12.0/24),不支持正则表达式字符串直接转换。你写的(?|172\.24\.12\.)这类正则语法,对inet类型来说是完全无效的输入,因此触发语法错误。
  • 你试图用正则逻辑来匹配IP网段,但PostgreSQL对IP类型有原生的网段匹配能力,不需要用正则绕路。

正确的实现方式

方法1:使用CIDR网段匹配(推荐,性能最优)

172.24.12.xxx对应的标准CIDR网段是172.24.12.0/24,可以用PostgreSQL内置的<<=操作符判断IP是否属于该网段:

-- 查询不属于172.24.12.0/24网段的连接
SELECT * FROM pg_catalog.pg_stat_activity
WHERE NOT (client_addr <<= '172.24.12.0/24');

方法2:字符串正则匹配(仅特殊场景使用)

如果一定要用正则,需要先把client_addr转换为字符串类型,再用正则匹配:

SELECT * FROM pg_catalog.pg_stat_activity
WHERE client_addr::text !~ '^172\.24\.12\.';

注意:方法2的性能远低于方法1,因为会触发全表类型转换,无法利用client_addr上的索引(如果有的话),生产环境优先用方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:25:25