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

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

Таблица 9.36. Операторы для типов 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'
&битовый ANDinet '192.168.1.6' & inet '0.0.0.255'
|битовый ORinet '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.37 перечислены функции, работающие с типами cidr и inet. Функции abbrev, host и text предназначены в основном для вывода данных в альтернативных форматах.

Таблица 9.37. Функции для типов 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 для IPv6family('::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задаёт размер маски для значения inetset_masklen('192.168.1.5/​24', 16)192.168.1.5/16
set_masklen(cidr, int)cidrзадаёт размер маски для значения cidrset_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.38 приведена функция, предназначенная для работы с типом macaddr. Функция trunc(macaddr) возвращает MAC-адрес, последние 3 байта в котором равны 0. Это может быть полезно для вычисления префикса, определяющего производителя.

Таблица 9.38. Функции macaddr

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

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