PostgreSQL-Network Address类型操作和函数
一、操作
inet << inet → boolean
子网是否严格包含在子网中?此运算符和接下来的四个运算符测试子网包含。他们只考虑两个地址的网络部分(忽略网络掩码右侧的任何位)并确定一个网络是否与另一个网络相同或属于另一个网络。
例子:
select inet '192.168.1.5' << inet '192.168.1/24';
select inet '192.168.0.5' << inet '192.168.1/24';
select inet '192.168.1/24' << inet '192.168.1/24';
inet <<= inet → boolean
子网是否包含或等于子网?
select inet '192.168.1/24' <<= inet '192.168.1/24';
inet >> inet → boolean
子网是否严格包含子网?
select inet '192.168.1/24' >> inet '192.168.1.5';
inet >>= inet → boolean
子网是否包含或等于子网?
select inet '192.168.1/24' >>= inet '192.168.1/24';
select inet '192.168.1/24' >> inet '192.168.1/24';
inet && inet → boolean
任一子网是否包含或等于另一个子网?
select inet '192.168.1/24' && inet '192.168.1.80/28';
SELECT inet '192.168.1/24' && inet '192.168.2.0/28';
-
inet → inet
按位计算 NOT。select ~ inet '192.168.1.6';
inet & inet → inet
计算按位与。
select inet '192.168.1.6' & inet '0.0.0.255';
inet | inet → inet
计算按位或。
select inet '192.168.1.6' | inet '0.0.0.255';
inet + bigint → inet
向地址添加偏移量。
select inet '192.168.1.6' + 25;
bigint + inet → inet
向地址添加偏移量。
select 200 + inet '::ffff:fff0:1';
inet - bigint → inet
从地址中减去偏移量。
SELECT inet '192.168.1.43' - 36;
inet - inet → bigint
计算两个地址的差。
SELECT inet '192.168.1.43' - inet '192.168.1.19';
select inet '::1' - inet '::ffff:1';
二、函数
broadcast ( inet ) → inet
计算地址网络的广播地址。
select broadcast(inet '192.168.1.5/24') ;
family ( inet ) → integer
返回地址的系列:4 表示 IPv4,6 表示 IPv6。
select family(inet '::1');
host ( inet ) → text
以文本形式返回 IP 地址,忽略网络掩码。
select host(inet '192.168.1.0/24');
hostmask ( inet ) → inet
计算地址网络的主机掩码。
select hostmask(inet '192.168.23.20/30');
inet_merge ( inet, inet ) → cidr
计算包含两个给定网络的最小网络。
select inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24') ;
inet_same_family ( inet, inet ) → boolean
测试地址是否属于同一个 IP 系列。
select inet_same_family(inet '192.168.1.5/24', inet '::1');
masklen ( inet ) → integer
返回网络掩码长度(以位为单位)。
select masklen(inet '192.168.1.5/24');
netmask ( inet ) → inet
计算地址网络的网络掩码。
select netmask(inet '192.168.1.5/24');
network ( inet ) → cidr
返回地址的网络部分,将网络掩码右侧的内容归零。(这相当于将值转换为 cidr。)
select network(inet '192.168.1.5/24');
set_masklen ( inet, integer ) → inet
设置 inet 值的网络掩码长度。地址部分不变。
select set_masklen(inet '192.168.1.5/24', 16);
set_masklen ( cidr, integer ) → cidr
设置 cidr 值的网络掩码长度。新网络掩码右侧的地址位设置为零。
select set_masklen(cidr '192.168.1.0/24', 16);
text ( inet ) → text
以文本形式返回未缩写的 IP 地址和网络掩码长度。(这与显式转换为文本具有相同的结果。)
select text(inet '192.168.1.5');
abbrev ( inet ) → text
创建一个作为文本的缩写显示格式。(结果与 inet 输出函数产生的结果相同;它只是与显式转换为文本的结果相比“缩写”,由于历史原因,它永远不会显示网络掩码部分。)
select abbrev(inet '10.1.0.0/32');
abbrev ( cidr ) → text
创建一个作为文本的缩写显示格式。
select abbrev(cidr '10.1.0.0/16');
trunc ( macaddr ) → macaddr
将地址的最后 3 个字节设置为零。剩余的前缀可以与特定的制造商相关联(使用 PostgreSQL 中未包含的数据)。
select trunc(macaddr '12:34:56:78:90:ab');
trunc ( macaddr8 ) → macaddr8
将地址的最后 5 个字节设置为零。剩余的前缀可以与特定的制造商相关联(使用 PostgreSQL 中未包含的数据)。
select trunc(macaddr8 '12:34:56:78:90:ab:cd:ef') ;
macaddr8_set7bit ( macaddr8 ) → macaddr8
将地址的第 7 位设置为 1,创建所谓的修改后的 EUI-64,以包含在 IPv6 地址中。
select macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef');