他のバージョンの文書 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. ネットワークアドレス関数と演算子 #

IPネットワークアドレス型であるcidrinet表 9.1に示す通常の比較演算子に加え、表 9.39表 9.40で示す特定目的の演算子と関数をサポートしています。

すべてのcidr値は暗黙的にinetにキャストできます。ですから以下で示すinetで使える演算子と関数はcidrでも使えます。 (inetcidr用の別々の関数があるのは、この両者で振る舞いが異なっているべきである場合があるからです。) またinet値をcidrにキャストすることが許されています。 これが行われると、ネットマスクの右側のすべてのビットは有効なcidr値を作るために暗黙的にゼロになります。

表9.39 IPアドレス演算子

演算子

説明

inet << inetboolean

サブネットが完全にサブネットに含まれているか? この演算子と次の4つの演算子はサブネットの包含をテストします。 それらは2つのアドレスのネットワーク部分だけを考慮し(ネットマスクの右のビットは無視されます)、ネットワークが他のネットワークと同一か、あるいはサブネットであるかどうかを決定します。

inet '192.168.1.5' << inet '192.168.1/24't

inet '192.168.0.5' << inet '192.168.1/24'f

inet '192.168.1/24' << inet '192.168.1/24'f

inet <<= inetboolean

サブネットがサブネットに含まれているか、あるいは同じか?

inet '192.168.1/24' <<= inet '192.168.1/24't

inet >> inetboolean

サブネットが完全にサブネットを含んでいるか?

inet '192.168.1/24' >> inet '192.168.1.5't

inet >>= inetboolean

サブネットがサブネットを含んでいるか、あるいは同じか?

inet '192.168.1/24' >>= inet '192.168.1/24't

inet && inetboolean

サブネットが他を含んでいるか、あるいは同じか?

inet '192.168.1/24' && inet '192.168.1.80/28't

inet '192.168.1/24' && inet '192.168.2.0/28'f

~ inetinet

ビット否定を計算します。

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

ビット積を計算します。

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

ビット和を計算します。

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

オフセットをアドレスに加算します。

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

オフセットをアドレスに加算します。

200 + inet '::ffff:fff0:1'::ffff:255.240.0.201

inet - bigintinet

アドレスからオフセットを減算します。

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

2つのアドレスの差を計算します。

inet '192.168.1.43' - inet '192.168.1.19'24

inet '::1' - inet '::ffff:1'-4294901760


表9.40 IPアドレス関数

関数

説明

abbrev ( inet ) → text

表示用テキスト省略形を作成します。 (結果はinet出力関数が生成するものと同じです。明示的にtextにキャストしたもの(歴史的な理由でネットマスク部分が抑止されていません)と比べると省略されているだけです。

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

表示用テキスト省略形を作成します。 (ネットマスクの右側のすべてのゼロオクテットを削除することによって省略形にします。表 8.22に他の例があります。)

abbrev(cidr '10.1.0.0/16')10.1/16

broadcast ( inet ) → inet

アドレスのネットワーク部のネットワークブロードキャストアドレスを計算します。

broadcast(inet '192.168.1.5/24')192.168.1.255/24

family ( inet ) → integer

アドレスファミリーを返します。IPv4なら4で、IPv6なら6です。

family(inet '::1')6

host ( inet ) → text

IPアドレスをテキストとして返します。ネットマスクは無視されます。

host(inet '192.168.1.0/24')192.168.1.0

hostmask ( inet ) → inet

アドレスのネットワークに対するホストマスクを計算します。

hostmask(inet '192.168.23.20/30')0.0.0.3

inet_merge ( inet, inet ) → cidr

与えられたネットワークを両方含む最小のネットワークを計算します。

inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24')192.168.0.0/22

inet_same_family ( inet, inet ) → boolean

アドレスが同じIPファミリーに属しているかどうかを判定します。

inet_same_family(inet '192.168.1.5/24', inet '::1')f

masklen ( inet ) → integer

ネットマスクのビット長を返します。

masklen(inet '192.168.1.5/24')24

netmask ( inet ) → inet

アドレスのネットワークに対するネットワークマスクを計算します。

netmask(inet '192.168.1.5/24')255.255.255.0

network ( inet ) → cidr

ネットマスクの右側をすべてゼロにしてアドレスのネットワーク部を返します。 (これは値をcidrにキャストするのと同じです。)

network(inet '192.168.1.5/24')192.168.1.0/24

set_masklen ( inet, integer ) → inet

ネットマスク長をinet値に設定します。 アドレスの部分は変更しません。

set_masklen(inet '192.168.1.5/24', 16)192.168.1.5/16

set_masklen ( cidr, integer ) → cidr

ネットマスク長をcidr値に設定します。 新しいネットマスクの右側のアドレスビットは0に設定されます。

set_masklen(cidr '192.168.1.0/24', 16)192.168.0.0/16

text ( inet ) → text

省略形ではないIPアドレスとネットマスク長をテキストとして返します。 (これはtextに明示的にキャストするのと同じ効果があります。)

text(inet '192.168.1.5')192.168.1.5/32


ヒント

関数abbrevhost、およびtext、は主として、代替のIPアドレスの整形表示を提供する目的のものです。

MACアドレス型であるmacaddrmacaddr8は、表 9.1で示す通常の比較演算子と表 9.41で示す特定目的のための関数をサポートします。 加えて上記のIPアドレス用に示したのと同様に、ビットごとの論理演算子~&|(NOT、AND、OR)をサポートします。

表9.41 MACアドレス関数

関数

説明

trunc ( macaddr ) → macaddr

アドレスの終わりの3バイトをゼロに設定します。 残りの前の部分は(PostgreSQLには含まれないデータを使って)特定の製造業者に関連付けることもできます。

trunc(macaddr '12:34:56:78:90:ab')12:34:56:00:00:00

trunc ( macaddr8 ) → macaddr8

アドレスの終わりの5バイトをゼロに設定します。 残りの前の部分は(PostgreSQLには含まれないデータを使って)特定の製造業者に関連付けることもできます。

trunc(macaddr8 '12:34:56:78:90:ab:cd:ef')12:34:56:00:00:00:00:00

macaddr8_set7bit ( macaddr8 ) → macaddr8

7番目のビットを1にし、修正EUI-64と呼ばれる形式にして、IPv6アドレスに含められるようにします。

macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')02:34:56:ff:fe:ab:cd:ef