8.8. 網絡地址資料類型

PostgreSQL 提供用於儲存 IPv4,IPv6 和 MAC 地址的資料類型, 在 Table 8-17 裡顯示。 用這些資料類型儲存網絡地址比用純文本類型好,因為這些類型提供輸入錯誤檢查和好些種特殊的操作和功能。 (見 Section 9.11)。

Table 8-17. 網絡地址類型

名字儲存空間描述
cidr12 或 24 字元IPv4 和 IPv6 網絡
inet12 或 24 字元IPv4 或 IPv6 網絡和主機
macaddr6 字元MAC 地址

在對 inet 或者 cidr 資料類型進行排序的時候, IPv4 地址將總是排在 IPv6 地址前面,包括那些封裝或者是映射在 IPv6 地址裡 的 IPv4 地址,比如 ::10.2.3.4 或者 ::ffff::10.4.3.2。

8.8.1. inet

inet 在一個資料域裡保存一個主機 IPv4 或 IPv6 地址, 以及一個可選的它所處的等效的子網。 子網的等效是透過計算主機地址中有多少位資料表示網絡地址的方法來 資料表示的 ("網絡掩碼")。 如果網絡掩碼是 32 並且地址是 IPv4 ,那麼不資料表示任何子網,只是一台主機。 在 IPv6 裡,地址長度是 128 位,因此 128 位資料表明一個唯一的主機地址。 請注意如果您想只接受網絡地址,您應該使用 cidr 類型而不是 inet

該類型的輸入格式是 地址/y 這裡 地址 是 IPv4 或者 IPv6 主機,y 是網絡掩碼的位數。 如果 /y 部分未填, 則網絡掩碼對 IPv 而言是 32,對 IPv6 而言是 128, 所以該值資料表示只有一台主機。 顯示時,如果 /y 部分是 /32,將不會顯示出來。

8.8.2. cidr

cidr 保存一個 IPv4 或 IPv6 網絡地址聲明。 其輸入和輸出遵循無類的互聯網域路由(Classless Internet Domain Routing)習慣。 聲明一個網絡的格式是 地址/y 這裡 地址 是 IPv4 或 IPv6 網絡地址而 /y 是 網絡掩碼的二進制位數。 如果省略 /y, 那麼掩碼部分用舊的有類的網絡編號系統進行計算,但要求輸入的資料已經包括了確定掩碼的所需的所有字元。 如果聲明了一個網絡地址,它的指定掩碼的右邊置了位,那麼算錯誤。

Table 8-18是些例子:

Table 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 對比

inetcidr 類型之間的基本區別是 inet 接受右邊有非零位的網絡掩碼, 而 cidr 不接受。

提示: 如果您不喜歡 inetcidr 值的輸出 格式,請試一下 hosttextabbrev 函數。

8.8.4. macaddr

macaddr 類型儲存 MAC 地址,也就是以太網卡硬件地址 (儘管 MAC 地址還用於其它用途)。可以接受多種客戶化的格式, 包括

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

它們聲明的都是同一個地址。 對於資料位 af,大小寫都行。 輸出總是我們上面給出的最後一種形式。

PostgreSQL 原始碼發佈的 contrib/mac 目錄裡有一些可以將 MAC 地址映射為硬件製造商的名字的工具。