9.12. Функции и операторы для работы с сетевыми адресами

В Таблица 9-34 показаны операторы, работающие с типами cidr и inet. Операторы <<, <<=, >>, >>= и && проверяют включения подсетей, рассматривая только биты сети в обоих адресах (игнорируя биты узлов) и определяя, идентична ли одна сеть другой или её подсети.

Таблица 9-34. Операторы для типов cidr и inet

ОператорОписаниеПример
< меньше 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'
~ битовый NOT ~ inet '192.168.1.6'
& битовый AND inet '192.168.1.6' & inet '0.0.0.255'
| битовый OR 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'

В Таблице 9-35 перечислены функции, работающие с типами cidr и inet. Функции abbrev, host и text предназначены в основном для вывода данных в альтернативных форматах.

Таблица 9-35. Функции для типов cidr и inet

ФункцияТип результатаОписаниеПримерРезультат
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 возвращает семейство адреса; 4 для адреса IPv4, 6 для IPv6 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. (Некоторые из функций указаны отдельно для типов inet и cidr, потому что их поведение с разными типами различается.) Кроме того, значение inet тоже можно привести к типу cidr. При этом все биты справа от сетевой маски просто обнуляются, чтобы значение стало допустимым для типа cidr. К типам inet и cidr можно привести и обычные текстовые значения, используя обычный синтаксис, например: inet(выражение) или столбец::cidr.

В Таблице 9-36 приведена функция, предназначенная для работы с типом macaddr. Функция trunc(macaddr) возвращает MAC-адрес, последние 3 байта в котором равны 0. Это может быть полезно для вычисления префикса, определяющего производителя.

Таблица 9-36. Функции macaddr

ФункцияТип результатаОписаниеПримерРезультат
trunc(macaddr) macaddr обнуляет последние 3 байта trunc(macaddr '12:34:56:​78:90:ab') 12:34:56:​00:00:00

Тип macaddr также поддерживает стандартные реляционные операторы лексической сортировки (>, <= и т. д.) и операторы битовой арифметики (~, & и |), соответствующие операциям NOT, AND и OR.