Postgresql 中文操作指南
9.12. Network Address Functions and Operators #
IP 网络地址类型 _cidr_和 _inet_支持 Table 9.1中显示的常用比较运算符,以及 Table 9.39和 Table 9.40中显示的专门运算符和函数。
任何 cidr 值都可以隐式转换为 inet;因此,下面显示为对 inet 执行操作的运算符和函数也适用于 cidr 值。(在针对 inet 和 cidr 有单独的函数的情况下,这意味着这两种情况下的行为应该是不同的。)此外,允许将 inet 值转换为 cidr。执行此操作时,掩码右侧的任何位都会被静默清零以创建有效的 cidr 值。
Table 9.39. IP Address Operators
Operator Description Example(s) |
inet << inet → boolean 子网是否严格包含在子网中?此运算符和后四个运算符测试子网包含情况。它们仅考虑两个地址的网络部分(忽略掩码网络右侧的任何位),并判断一个网络是否与另一个网络相同或为另一个网络的子网。 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 <⇐ inet → boolean 子网包含或等于子网吗? inet '192.168.1/24' <⇐ inet '192.168.1/24' → t |
inet >> inet → boolean 子网严格包含子网吗? inet '192.168.1/24' >> inet '192.168.1.5' → t |
inet >>= inet → boolean 子网包含或等于子网吗? inet '192.168.1/24' >>= inet '192.168.1/24' → t |
inet && inet → boolean 任一子网包含或等于另一个子网吗? inet '192.168.1/24' && inet '192.168.1.80/28' → t inet '192.168.1/24' && inet '192.168.2.0/28' → f |
~ inet → inet 计算按位 NOT。 ~ inet '192.168.1.6' → 63.87.254.249 |
inet & inet → inet 计算按位 AND。 inet '192.168.1.6' & inet '0.0.0.255' → 0.0.0.6 |
inet _ |
_ inet → inet 计算按位 OR。_inet '192.168.1.6' |
inet '0.0.0.255'_ → 192.168.1.255 |
inet + bigint → inet 将偏移量添加到地址中。 inet '192.168.1.6' + 25 → 192.168.1.31 |
bigint + inet → inet 将偏移量添加到地址中。 200 + inet '::ffff:fff0:1' → ::ffff:255.240.0.201 |
inet - bigint → inet 从地址中减去偏移量。 inet '192.168.1.43' - 36 → 192.168.1.7 |
inet - inet → bigint 计算两个地址的差值。 inet '192.168.1.43' - inet '192.168.1.19' → 24 inet '::1' - inet '::ffff:1' → -4294901760 |
Table 9.40. IP Address Functions
Function Description Example(s) |
abbrev ( inet ) → text 创建文本形式的缩写显示格式。(结果与 inet 输出函数的结果相同;“缩写”仅相对于显式转换为 text 的结果而言,由于历史原因,此格式永远不会抑制掩码网络部分。) abbrev(inet '10.1.0.0/32') → 10.1.0.0 |
abbrev ( cidr ) → text 创建文本形式的缩写显示格式。(缩写包括丢弃掩码网络右侧的所有零八位字节;更多示例见 Table 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 返回地址的族: 4 表示 IPv4, 6 表示 IPv6。 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 值设置网络掩码长度。新网络掩码右侧的地址位数将设置为 0。 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 |
Tip
abbrev、host 和 text 函数主要用于为 IP 地址提供备用显示格式。
MAC 地址类型 macaddr_和 _macaddr8_支持 Table 9.1中显示的常用比较运算符,以及 Table 9.41中显示的专门函数。此外,它们支持按位逻辑运算符 _~、&_和 _|(非、且和或),就像上面针对 IP 地址显示的一样。
Table 9.41. MAC Address Functions
Function Description Example(s) |
trunc ( macaddr ) → macaddr 将地址的最后 3 个字节设置为 0。剩余的前缀可以与特定制造商关联(使用 PostgreSQL 中未包含的数据)。 trunc(macaddr '12:34:56:78:90:ab') → 12:34:56:00:00:00 |
trunc ( macaddr8 ) → macaddr8 将地址的最后 5 个字节设置为 0。剩余的前缀可以与特定制造商关联(使用 PostgreSQL 中未包含的数据)。 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 |