类型
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 类型还支持标准关系操作符( > , <= 等)用于词法排序,和按位运算符( ~ , & 和 | )非,与和或。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31490526/viewspace-2738426/
,如需转载,请注明出处,否则将追究法律责任。