★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

9.12. ネットワークアドレス関数と演算子

表9.36「cidrinet演算子」に、inet型およびcidr型で使用可能な演算子を示します。 演算子 <<<<=>>>>=および&&はサブネットの包含関係を調べるものです。 これらは2つのアドレスのネットワークの部分のみを考慮(ホスト部分を無視)して2つのネットワークアドレスが等しいか、もしくは一方のネットワークが他方のサブネットになっているかを特定します。

表9.36 cidrinet演算子

演算子説明
< 未満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'
~ ビット否定~ inet '192.168.1.6'
& ビット積inet '192.168.1.6' & inet '0.0.0.255'
| ビット和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.37「cidrおよびinet型関数」に、inet型およびcidr型で使用可能な関数を示します。 関数abbrevhost、および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アドレスファミリの取り出し。IPv4では4、IPv6では6family('::1')6
host(inet) textIPアドレスをテキストで抽出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) inetinet値のネットマスク長を設定set_masklen('192.168.1.5/24', 16)192.168.1.5/16
set_masklen(cidr, int)cidrcidr値のネットマスク長を設定set_masklen('192.168.1.0/24'::cidr, 16)192.168.0.0/16
text(inet) textIPアドレスとネットマスク長をテキストで抽出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値でも動作します。 (inetcidrで別々に関数が存在するものがありますが、それは、この2つで動作に違いがあるためです。) また、inet値からcidrへのキャストも許されます。これが行われると、ネットマスクの右側のビットは、cidrとして有効な値とするために0となります。 さらに、通常のキャスト構文、例えば、inet(expression)colname::cidrを使用して、テキスト値をinetcidrにキャストすることもできます。

表9.38「macaddr型関数」に、macaddr型で使用可能な関数を示します。 関数trunc(macaddr)は終わりの3バイトがゼロに設定されたMACアドレスを返します。 これは、残った接頭部を製造者に対応させることに使えます。

表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のビット演算子(~&|)もサポートしています。