选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

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

Table 9.37列出了可用于 cidrinet 类型的操作符。操作符 <<<<=>>>>=&& 测试子网包含关系。它们只考虑两个地址的网络部分(忽略主机部分),并判断一个网络是否与另一个网络相同,或是另一个网络的子网。

Table 9.37. cidrinet 操作符

操作符 描述 示例
< 小于 inet '192.168.1.5' < inet '192.168.1.6'
<= 小于或等于 inet '192.168.1.5' <= inet '192.168.1.5'
= 等于 inet '192.168.1.5' = inet '192.168.1.5'
>= 大于或等于 inet '192.168.1.5' >= inet '192.168.1.5'
> 大于 inet '192.168.1.5' > inet '192.168.1.4'
<> 不等于 inet '192.168.1.5' <> inet '192.168.1.4'
<< 被包含 inet '192.168.1.5' << inet '192.168.1/24'
<<= 被包含于或等于 inet '192.168.1/24' <<= inet '192.168.1/24'
>> 包含 inet '192.168.1/24' >> inet '192.168.1.5'
>>= 包含或等于 inet '192.168.1/24' >>= inet '192.168.1/24'
&& 包含或被包含于 inet '192.168.1/24' && inet '192.168.1.80/28'
~ 按位非 ~ inet '192.168.1.6'
& 按位与 inet '192.168.1.6' & inet '0.0.0.255'
| 按位或 inet '192.168.1.6' | inet '0.0.0.255'
+ 加法 inet '192.168.1.6' + 25
- 减法 inet '192.168.1.43' - 36
- 减法 inet '192.168.1.43' - inet '192.168.1.19'

Table 9.38列出了可用于 cidrinet 类型的函数。abbrevhosttext 函数主要用于提供其他显示格式。

Table 9.38. cidrinet 函数

函数 返回类型 描述 示例 结果
abbrev(inet) text 以文本表示的缩略显示格式 abbrev(inet '10.1.0.0/16') 10.1.0.0/16
abbrev(cidr) text 以文本表示的缩略显示格式 abbrev(cidr '10.1.0.0/16') 10.1/16
broadcast(inet) inet 网络的广播地址 broadcast('192.168.1.5/24') 192.168.1.255/24
family(inet) int 提取地址族;IPv4 为 4,IPv6 为 6 family('::1') 6
host(inet) text 以文本形式提取 IP 地址 host('192.168.1.5/24') 192.168.1.5
hostmask(inet) inet 构造网络的主机掩码 hostmask('192.168.23.20/30') 0.0.0.3
masklen(inet) int 提取网络掩码长度 masklen('192.168.1.5/24') 24
netmask(inet) inet 构造网络的网络掩码 netmask('192.168.1.5/24') 255.255.255.0
network(inet) cidr 提取地址的网络部分 network('192.168.1.5/24') 192.168.1.0/24
set_masklen(inet, int) inet 设置 inet 值的网络掩码长度 set_masklen('192.168.1.5/24', 16) 192.168.1.5/16
set_masklen(cidr, int) cidr 设置 cidr 值的网络掩码长度 set_masklen('192.168.1.0/24'::cidr, 16) 192.168.0.0/16
text(inet) text 以文本形式提取 IP 地址和网络掩码长度 text(inet '192.168.1.5') 192.168.1.5/32
inet_same_family(inet, inet) boolean 这些地址是否属于同一地址族? inet_same_family('192.168.1.5/24', '::1') false
inet_merge(inet, inet) cidr 包含两个给定网络的最小网络 inet_merge('192.168.1.5/24', '192.168.2.5/24') 192.168.0.0/22

任何 cidr 值都可以隐式或显式地转换为 inet;因此,上述处理 inet 的函数也适用于 cidr 值。(如果 inetcidr 各有单独的函数,是因为这两种情况下的行为应当不同。)也允许将 inet 值转换为 cidr。这样做时,网络掩码右侧的所有位都会被直接置零,以创建有效的 cidr 值。此外,还可以用普通的类型转换语法将文本值转换为 inetcidr:例如 inet(expression)colname::cidr

Table 9.39列出了可用于 macaddr 类型的函数。函数 trunc(macaddr) 返回将最后 3 个字节置零的 MAC 地址。可以用余下的前缀确定制造商。

Table 9.39. macaddr 函数

函数 返回类型 描述 示例 结果
trunc(macaddr) macaddr 将最后 3 个字节设为零 trunc(macaddr '12:34:56:78:90:ab') 12:34:56:00:00:00

macaddr 类型还支持按字典顺序比较的标准关系操作符(><= 等),以及用于按位非、与、或的位运算操作符(~&|)。

Table 9.40列出了可用于 macaddr8 类型的函数。函数 trunc(macaddr8) 返回将最后 5 个字节置零的 MAC 地址。可以用余下的前缀确定制造商。

Table 9.40. macaddr8 函数

函数 返回类型 描述 示例 结果
trunc(macaddr8) macaddr8 将最后 5 个字节设为零 trunc(macaddr8 '12:34:56:78:90:ab:cd:ef') 12:34:56:00:00:00:00:00
macaddr8_set7bit(macaddr8) macaddr8 将第 7 位设为 1,即修订的 EUI-64 格式,以便用于 IPv6 地址 macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef') 02:34:56:ff:fe:ab:cd:ef

macaddr8 类型还支持用于排序的标准关系操作符(><= 等),以及用于按位非、与、或的位运算操作符(~&|)。