PostgreSQLは、表8.21「ネットワークアドレスデータ型」に示すように、IPv4アドレス、IPv6アドレス、MACアドレスを格納するデータ型を提供します。 ネットワークアドレスを格納するには普通のテキストデータ型の代わりにこれらの型を使うことの方が優れています。 なぜなら、これらのデータ型は入力値のエラー検査と専用の演算子と関数を提供しているからです (「ネットワークアドレス関数と演算子」を参照してください)。
表8.21 ネットワークアドレスデータ型
名前 | 格納サイズ | 説明 |
---|---|---|
cidr | 7もしくは19バイト | IPv4、およびIPv6ネットワーク |
inet | 7もしくは19バイト | IPv4もしくはIPv6ホスト、およびネットワーク |
macaddr | 6バイト | MACアドレス |
inet
もしくはcidr
をソートする時、IPv4アドレスは常にIPv6よりも前にソートされます。
::10.2.3.4や::ffff:10.4.3.2などIPv6アドレス内に埋め込まれた、もしくは関連付けされたIPv4アドレスも同様です。
inet
inet
型はIPv4もしくはIPv6ホストアドレスとオプションでそのサブネットを1つのフィールドに保持します。
サブネットはホストアドレスのうち何ビットがネットワークアドレス(「ネットマスク」)を表すかを指定することで表現されます。
もしネットマスクが32の場合、IPv4では単一ホストを意味し、サブネットを示しません。
IPv6ではアドレス長は128ビットです。
そのため128ビットが一意なホストアドレスを指定します。
ネットワークのみを使用したい場合はinet
ではなくcidr
型を利用してください。
このデータ型に対する入力書式は、IPv4、IPv6両方ともaddress/y
です。
y
がネットマスクのビット数です。
もし/y
部分がない場合、ネットマスクはIPv4では32、IPv6では128となり、つまり、その値は単一ホストを表現します。
ネットマスクが単一ホストを表す場合、その表示時、/y
の部分は抑制されます。
cidr
cidr
データ型はIPv4、IPv6ネットワーク仕様を保持します。
入出力書式はクラス分けのないインターネットドメインルーティング協定に従います。
ネットワークを指定する時の書式はaddress/y
で、address
がIPv4もしくはIPv6アドレスで表したネットワークです。
y
はネットマスクのビット数です。
もしy
が省略された場合には、入力時に書き込まれたオクテットすべてが含まれるように大きさが確保されること以外は、従来のクラス付きアドレス番号指定システムに従って計算されます。
指定したネットマスクの右側にビットをセットしたネットワークアドレスを指定するとエラーになります。
表8.22「cidr
データ型入力例」に例をいくつか示します。
表8.22 cidr
データ型入力例
cidr 入力 | cidr 出力 |
|
---|---|---|
192.168.100.128/25 | 192.168.100.128/25 | 192.168.100.128/25 |
192.168/24 | 192.168.0.0/24 | 192.168.0/24 |
192.168/25 | 192.168.0.0/25 | 192.168.0.0/25 |
192.168.1 | 192.168.1.0/24 | 192.168.1/24 |
192.168 | 192.168.0.0/24 | 192.168.0/24 |
128.1 | 128.1.0.0/16 | 128.1/16 |
128 | 128.0.0.0/16 | 128.0/16 |
128.1.2 | 128.1.2.0/24 | 128.1.2/24 |
10.1.2 | 10.1.2.0/24 | 10.1.2/24 |
10.1 | 10.1.0.0/16 | 10.1/16 |
10 | 10.0.0.0/8 | 10/8 |
10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32 |
2001:4f8:3:ba::/64 | 2001:4f8:3:ba::/64 | 2001:4f8:3:ba::/64 |
2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 | 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 | 2001: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 |
inet
とcidr
データ型の違いinet
データ型とcidr
データ型との基本的な相違は、inet
ではネットマスクの右側に0でないビット値を受け付けますが、cidr
では受け付けないことです。
もしinet
もしくはcidr
の値の出力書式が気に入らないのであれば、関数host
、text
およびabbrev
を試してください。
macaddr
macaddr
データ型は例えばイーサネットカードのハードウェアアドレスとして知られるMACアドレスを保持します(MACアドレスは他の目的でも使われますが)。
入力は以下の形式を受け入れます。
'08:00:2b:01:02:03' |
'08-00-2b-01-02-03' |
'08002b:010203' |
'08002b-010203' |
'0800.2b01.0203' |
'0800-2b01-0203' |
'08002b010203' |
これらの例はすべて同一のアドレスを指定します。
a
からf
までの桁は大文字小文字どちらでも構いません。
出力は常に最初に示された形式となります。
IEEE標準802-2001では、2番目の書式(ハイフンを使用)をMACアドレスの正規の表現と規定しています。 また、最初の書式(コロンを使用)をビット反転記法、つまり08-00-2b-01-02-03は01:00:4D:08:04:0Cであると規定しています。 この規約は現在ではほぼ無視され、古びたネットワーク(トークンリングなど)のみに関連するものです。 PostgreSQLではビット反転に関する準備をしていません。 また、すべての受付け可能な書式では正規のLSB順を使用します。
残る5つの入力書式はどの標準にも属しません。