2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不再支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

9.12. 网络地址函数和操作符 #

IP 网络地址类型 cidrinet 支持常规的比较操作符(如 表 9.1 所示),以及 表 9.39表 9.40 中所示的专用操作符和函数。

cidr 值可以隐式转换为 inet;因此,下文显示为 inet 操作的函数和操作符也可用于 cidr 值。(对于 inetcidr 有单独的函数,是因为它们在这两种情况下行为应有所不同。)另外,也允许将 inet 值转换为 cidr。执行转换时,会静默地将网络掩码右侧的任何位清零,以创建有效的 cidr 值。

表 9.39. IP 地址操作符

运算符

描述

示例

inet << inetboolean

子网是否严格包含在另一个子网中?此操作符以及接下来的四个操作符用于测试子网包含关系。它们只考虑两个地址的网络部分(忽略网络掩码右侧的任何位),并判断一个网络是否与另一个网络相同或为其子集。

inet '192.168.1.5' << inet '192.168.1/24't

inet '192.168.0.5' << inet '192.168.1/24'f

inet '192.168.1/24' << inet '192.168.1/24'f

inet <<= inetboolean

子网是否包含在另一个子网中或等于另一个子网?

inet '192.168.1/24' <<= inet '192.168.1/24't

inet >> inetboolean

子网是否严格包含另一个子网?

inet '192.168.1/24' >> inet '192.168.1.5't

inet >>= inetboolean

子网是否包含另一个子网或等于另一个子网?

inet '192.168.1/24' >>= inet '192.168.1/24't

inet && inetboolean

两个子网是否相互包含或相等?

inet '192.168.1/24' && inet '192.168.1.80/28't

inet '192.168.1/24' && inet '192.168.2.0/28'f

~ inetinet

计算按位非。

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

计算按位与。

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

计算按位或。

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

向地址添加偏移量。

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

向地址添加偏移量。

200 + inet '::ffff:fff0:1'::ffff:255.240.0.201

inet - bigintinet

从地址减去偏移量。

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

计算两个地址的差值。

inet '192.168.1.43' - inet '192.168.1.19'24

inet '::1' - inet '::ffff:1'-4294901760


表 9.40. IP 地址函数

函数

描述

示例

abbrev ( inet ) → text

创建一个缩写的显示格式(文本)。(结果与 inet 输出函数产生的结果相同;它之所以被 缩写,只是相对于显式转换为 text 的结果而言,因为历史原因,后者永远不会抑制网络掩码部分。)

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

创建一个缩写的显示格式(文本)。(缩写包括删除网络掩码右侧的全部为零的八位组;更多示例请参见 表 8.22。)

abbrev(cidr '10.1.0.0/16')10.1/16

broadcast ( inet ) → inet

计算地址所在网络的广播地址。

broadcast(inet '192.168.1.5/24')192.168.1.255/24

family ( inet ) → integer

返回地址的族:IPv4 为 4,IPv6 为 6

family(inet '::1')6

host ( inet ) → text

以文本格式返回 IP 地址,忽略网络掩码。

host(inet '192.168.1.0/24')192.168.1.0

hostmask ( inet ) → inet

计算地址所在网络的子网掩码。

hostmask(inet '192.168.23.20/30')0.0.0.3

inet_merge ( inet, inet ) → cidr

计算包含两个给定网络的最小网络。

inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24')192.168.0.0/22

inet_same_family ( inet, inet ) → boolean

测试地址是否属于相同的 IP 族。

inet_same_family(inet '192.168.1.5/24', inet '::1')f

masklen ( inet ) → integer

返回网络掩码的长度(以位为单位)。

masklen(inet '192.168.1.5/24')24

netmask ( inet ) → inet

计算地址所在网络的网络掩码。

netmask(inet '192.168.1.5/24')255.255.255.0

network ( inet ) → cidr

返回地址的网络部分,将网络掩码右侧的所有位清零。(这等同于将值转换为 cidr。)

network(inet '192.168.1.5/24')192.168.1.0/24

set_masklen ( inet, integer ) → inet

inet 值设置网络掩码长度。地址部分保持不变。

set_masklen(inet '192.168.1.5/24', 16)192.168.1.5/16

set_masklen ( cidr, integer ) → cidr

cidr 值设置网络掩码长度。新网络掩码右侧的地址位会被清零。

set_masklen(cidr '192.168.1.0/24', 16)192.168.0.0/16

text ( inet ) → text

以文本格式返回未缩写的 IP 地址和网络掩码长度。(这与显式转换为 text 的结果相同。)

text(inet '192.168.1.5')192.168.1.5/32


提示

abbrevhosttext 函数主要用于提供 IP 地址的替代显示格式。

MAC 地址类型 macaddrmacaddr8 支持常规的比较操作符(如 表 9.1 所示),以及 表 9.41 中所示的专用函数。此外,它们还支持按位逻辑操作符 ~&|(非、与和或),就像上面为 IP 地址所示的那样。

表 9.41. MAC 地址函数

函数

描述

示例

trunc ( macaddr ) → macaddr

将地址的最后 3 个字节设置为零。剩余的前缀可能与特定制造商相关(使用 PostgreSQL 中未包含的数据)。

trunc(macaddr '12:34:56:78:90:ab')12:34:56:00:00:00

trunc ( macaddr8 ) → macaddr8

将地址的最后 5 个字节设置为零。剩余的前缀可能与特定制造商相关(使用 PostgreSQL 中未包含的数据)。

trunc(macaddr8 '12:34:56:78:90:ab:cd:ef')12:34:56:00:00:00:00:00

macaddr8_set7bit ( macaddr8 ) → macaddr8

将地址的第 7 位设置为一,创建所谓的修改后的 EUI-64,用于包含在 IPv6 地址中。

macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')02:34:56:ff:fe:ab:cd:ef


提交更正

如果您在文档中发现任何不正确之处、与您对特定功能的实际体验不符之处,或需要进一步澄清之处,请使用 此表格 来报告文档问题。