他のバージョンの文書 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

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

PostgreSQLは、表 8.21に示すように、IPv4アドレス、IPv6アドレス、MACアドレスを格納するデータ型を提供します。 ネットワークアドレスを格納するには普通のテキストデータ型の代わりにこれらの型を使うことの方が優れています。 なぜなら、これらのデータ型は入力値のエラー検査と専用の演算子と関数を提供しているからです (9.12を参照してください)。

表8.21 ネットワークアドレスデータ型

名前格納サイズ説明
cidr7もしくは19バイトIPv4、およびIPv6ネットワーク
inet7もしくは19バイトIPv4もしくはIPv6ホスト、およびネットワーク
macaddr6バイトMACアドレス
macaddr88 バイトMAC アドレス (EUI-64 形式)

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

8.9.1. inet

inet型はIPv4もしくはIPv6ホストアドレスとオプションでそのサブネットを1つのフィールドに保持します。 サブネットはホストアドレス内のネットワークアドレスのビット数(ネットマスク)により表現されます。 ネットマスクが32でアドレスがIPv4の場合、その値はサブネットを示さず、単一ホストを表します。 IPv6ではアドレス長は128ビットですので、128ビットが一意なホストアドレスを指定します。 ネットワークのみを使用したい場合はinetではなくcidr型を利用してください。

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

8.9.2. cidr

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

表 8.22に例をいくつか示します。

表8.22 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.9.3. inetcidrデータ型の違い

inetデータ型とcidrデータ型との基本的な相違は、inetではネットマスクの右側に0でないビット値を受け付けますが、cidrでは受け付けないことです。 例えば、192.168.0.1/24inetでは有効ですが、cidrでは有効ではありません。

ヒント

もしinetもしくはcidrの値の出力書式が気に入らないのであれば、関数hosttextおよびabbrevを試してください。

8.9.4. 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つの入力書式はどの標準にも属しません。

8.9.5. macaddr8

macaddr8データ型はイーサーネットカードのハードウェアアドレスなどで知られるEUI-64形式でデータを格納します(MACアドレスは他の目的にもよく使用されます。)。 このデータ型は6バイト長と8バイト長の両方の長さのMACアドレスを受け入れることがき、8バイト長の形式で格納します。 6バイト形式で与えられたMACアドレスは8バイト長の形式では、それぞれ、4番目と5番目のバイトをFFとFEとして格納されます。 IPv6はEUI-48から変換後に7番目のビットに1となるべき設定がなされた修正EUI-64形式を使用する点に注意してください。 macaddr8_set7bit関数がこの変換生成を提供します。 一般的には(バイト境界上での)16進数の対で構成され、任意に':''-' もしくは '.'のいずれかの一貫した記号で分割された入力を受け付けます。 16進数の桁数は16桁(8 バイト)か12桁(6バイト)のいずれかである必要があります。 前後の空白は無視されます。 以下の入力形式の例は受け付けられます。

'08:00:2b:01:02:03:04:05'
'08-00-2b-01-02-03-04-05'
'08002b:0102030405'
'08002b-0102030405'
'0800.2b01.0203.0405'
'0800-2b01-0203-0405'
'08002b01:02030405'
'08002b0102030405'

これらの例は全て同じアドレスを指します。 桁には大文字のA からF、小文字のa からfも受付けられます。 出力は常に1番目の形式です。 下から6つの形式は標準ではありません。 従来のEUI-48形式の48ビットのMACアドレスからIPv6のホスト部を含む修正がなされたEUI-64形式へ変更するためには、以下に示すようにmacaddr8_set7bitを使用します。

SELECT macaddr8_set7bit('08:00:2b:01:02:03');

    macaddr8_set7bit     
-------------------------
 0a:00:2b:ff:fe:01:02:03
(1 row)