8.8. ネットワークアドレス型

PostgreSQLではIPv4アドレス、IPv6アドレス、MACアドレスを格納するデータ型が提供されています。 表8-17を参照してください。 これらのデータ型は入力値のエラー検査と専用の演算子と関数を複数提供していますので、普通のテキストデータ型の代わりにこちらを使うことをお勧めします。

表 8-17. ネットワークアドレスデータ型

名前格納サイズ説明
cidr12もしくは24バイトIPv4もしくはIPv6ネットワーク
inet12もしくは24バイトIPv4もしくはIPv6ホスト、および、ネットワーク
macaddr6バイトMACアドレス

inetもしくはcidrをソートする時、IPv4アドレスは常にIPv6よりも前にソートされます。 ::10.2.3.4 or ::ffff::10.4.3.2などIPv6アドレス内に埋め込まれた、もしくは、関連付けされたIPv4アドレスも同様です。

8.8.1. inet

inet型はIPv4もしくはIPv6ホストアドレスとオプションでそのホストアドレスが所属するサブネット識別情報を1つのフィールドに保持します。 サブネット識別情報はホストアドレスの内何ビットがネットワークアドレス("netmask")を表すかを指定することで表現されます。 もしネットマスクが32の場合、IPv4では単一ホストを意味し、サブネットを示しません。 IPv6ではアドレス長は128ビットです。 そのため128ビットが一意なホストアドレスを指定します。 ネットワークのみを使用したい場合はinetではなくcidr型を利用してください。

このデータ型に対する入力書式は、IPv4、IPv6両方ともaddress/yです。 yがネットマスクのビット数です。 もし/yの部分を省略するとネットマスクはIPv4では32、IPv6では128となり、その値は単一ホストを表現します。 ネットマスクが単一ホストを表す場合、その表示時、/yの部分は抑制されます。

8.8.2. cidr

cidrデータ型はIPv4、IPv6ネットワーク仕様を保持します。 入出力書式はクラス分けのないインターネットドメインルーティング協定に従います。 ネットワークを指定する時の書式はaddress/yで、addressがIPv4もしくはIpv6アドレスで表したネットワークです。 yはネットマスクのビット数です。 もしyが省略された場合には、入力時に書き込まれたオクテットすべてが含まれるように大きさが確保されること以外は、従来のクラス付きアドレス番号指定システムに従って計算されます。 指定したネットマスクの右側にビットをセットしたネットワークアドレスを指定するとエラーになります。

表8-18に例がいくつかあります。

表 8-18. cidrデータ型入力例

cidr 入力cidr 出力abbrev(cidr)
192.168.100.128/25192.168.100.128/25192.168.100.128/25
192.168/24192.168.0.0/24192.168.0/24
192.168/25192.168.0.0/25192.168.0.0/25
192.168.1192.168.1.0/24192.168.1/24
192.168192.168.0.0/24192.168.0/24
128.1128.1.0.0/16128.1/16
128128.0.0.0/16128.0/16
128.1.2128.1.2.0/24128.1.2/24
10.1.210.1.2.0/2410.1.2/24
10.110.1.0.0/1610.1/16
1010.0.0.0/810/8
10.1.2.3/3210.1.2.3/3210.1.2.3/32
2001:4f8:3:ba::/642001:4f8:3:ba::/642001:4f8:3:ba::/64
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/1282001:4f8:3:ba:2e0:81ff:fe22:d1f1/1282001:4f8:3:ba:2e0:81ff:fe22:d1f1
::ffff:1.2.3.0/120::ffff:1.2.3.0/120::ffff:1.2.3/120
::ffff:1.2.3.0/128::ffff:1.2.3.0/128::ffff:1.2.3.0/128

8.8.3. inetcidrデータ型の違い

inetデータ型とcidrデータ型との基本的な相違は、inetではネットマスクの右側に0でないビット値を受け付けますが、cidrでは受け付けないことです。

ティップ: もしinetもしくはcidrの値の出力書式が気に入らないのであれば、関数host()、text()、および abbrev()を試してください。

8.8.4. macaddr

macaddrデータ型はMACアドレス、つまり、Ethernetカードのハードウェアアドレスを保持します(MACアドレスは他の目的でもつかわれますが)。 以下を含む様々な形式の入力が受け入れられます。

'08002b:010203'
'08002b-010203'
'0800.2b01.0203'
'08-00-2b-01-02-03'
'08:00:2b:01:02:03'

これはすべて同一のアドレスを指定しています。 aからfまでの桁は大文字小文字どちらでも構いません。 出力は常に例示した最後の形式となります。

PostgreSQLのソース配付物のcontrib/macディレクトリにはMACアドレスとハードウェア製造メーカ名の対応に使用できるツールが含まれています。