PostgreSQL:网络地址——类型、运算符和函数

来源:这里教程网 时间:2026-03-14 20:13:34 作者:

类型

PostgreSQL 提供的数据类型来存储的 IPv4、IPv6 的地址和MAC地址。这是更好地使用这些类型,而不是纯文本类型存储网络地址,因为这些类型提供输入错误检查和特殊的操作和函数。

名称 存储长度 描述
cidr 7 或 19 bytes IPv4 和 IPv6 网络
inet 7 或 19 bytes IPv4 和 IPv6 hosts 和网络
macaddr 6 bytes MAC 地址
macaddr8 8 bytes MAC 地址(EUI-64 格式)

操作符

操作符 描述 举例 结果
< 小于 inet '192.168.1.5' < inet '192.168.1.6' TRUE
<= 小于等于 inet '192.168.1.5' <= inet '192.168.1.5' TRUE
= 等于 inet '192.168.1.5' = inet '192.168.1.5' TRUE
>= 大于等于 inet '192.168.1.5' >= inet '192.168.1.5' TRUE
> 大于 inet '192.168.1.5' > inet '192.168.1.4' TRUE
<> 不等于 inet '192.168.1.5' <> inet '192.168.1.4' TRUE
<< 被包含 inet '192.168.1.5' << inet '192.168.1/24' TRUE
<<= 被包含或等于 inet '192.168.1/24' <<= inet '192.168.1/24' TRUE
>> 包含 inet '192.168.1/24' >> inet '192.168.1.5' TRUE
>>= 包含或等于 inet '192.168.1/24' >>= inet '192.168.1/24' TRUE
&& 包含或被包含 inet '192.168.1/24' && inet '192.168.1.80/28' TRUE
~ 按位取反 ~inet '192.168.1.6' 63.87.254.249
& 按位与 inet '192.168.1.6' & inet '0.0.0.255' 0.0.0.6
| 按位或 inet '192.168.1.6' | inet '0.0.0.255' 192.168.1.255
+ inet '192.168.1.6' + 25 192.168.1.31
- inet '192.168.1.43' - 36 192.168.1.7
- inet '192.168.1.43' - inet '192.168.1.19' 24

函数

cidr 和 inet 函数

函数 返回类型 描述 示例 结果
abbrev(inet) text 显示为文本格式 select abbrev(inet '10.1.0.0/16'); 10.1.0.0/16
abbrev(cidr) text 显示为文本格式 select abbrev(cidr '10.1.0.0/16'); 10.1/16
broadcast(inet) inet 网络广播地址 select broadcast('192.168.1.5/24'); 192.168.1.255/24
family(inet) int 获取地址族,4位IPv4,6为IPv6 select family('::1'); 6
host(inet) text 抽取IP地址,并以text显示 select host('192.168.1.5/24'); 192.168.1.5
hostmask(inet) inet 为网络构造主机掩码 select hostmask('192.168.23.20/30'); 0.0.0.3
masklen(inet) int 抽取掩码长度 select masklen('192.168.1.5/24'); 24
netmask(inet) inet 为网络构造子网掩码 select netmask('192.168.1.5/24'); 255.255.255.0
network(inet) cidr 抽取地址的网络部分 select network('192.168.1.5/24'); 192.168.1.0/24
set_masklen(inet, int) inet 为inet设置子网掩码长度 select set_masklen('192.168.1.5/24', 16); 192.168.1.5/16
set_masklen(cidr, int) cidr 为cidr设置子网掩码长度 select set_masklen('192.168.1.0/24'::cidr, 16); 192.168.0.0/16
text(inet) text 将IP地址和掩码长度抽取为文本 select text(inet '192.168.1.5'); 192.168.1.5/32
inet_same_family(inet, inet) boolean 是否属于相同的地址族 select inet_same_family('192.168.1.5/24', '::1'); f
inet_merge(inet, inet) cidr 包括两个入参地址的最小网络地址 select inet_merge('192.168.1.5/24', '192.168.2.5/24'); 192.168.0.0/22

macaddr 函数

函数 返回类型 描述 示例 结果
trunc(macaddr) macaddr 将mac地址后3个字节设置为0 select trunc(macaddr '12:34:56:78:90:ab'); 12:34:56:00:00:00

macaddr 类型还支持标准关系操作符( > , <= 等)用于词法排序,和按位运算符( ~ , & 和 | )非,与和或。

相关推荐