5.8. 网络地址数据类型

PostgreSQL 提供用于存储 IP 和 MAC 地址的数据类型, 在 Table 5-18 里显示。 用这些数据类型比用纯文本类型好,因为这些类型提供输入错误检查 和好些种特殊的操作和功能.

Table 5-18. 网络地址数据类型

名字存储描述范围
cidr12 字节IP 网络有效的IPv4网络
inet12 字节IP 网络和主机有效的IPv4主机
macaddr6 字节MAC 地址客户化格式

还不支持 IPv6.

5.8.1. inet

inet保存一个主机 IP 地址, 以及一个可选的它所处的等效的子网. 子网是用地址的网络地址部分的二进制位的数量来表示的( "网络掩码"). 如果网络掩码是 32,那么不表示任何子网,只是一台主机. 请注意如果你想只接受网络地址,你应该使用 cidr 类型而不是 inet

该类型的输入格式是 x.x.x.x/y 这里 x.x.x.x 是 是互联网主机,y 是网络掩码的位数. 如果 /y 部分未填, 则网络掩码是 /32,表示只有一台主机. 显示时,如果 /y 部分是 /32,将不会显示出来.

5.8.2. cidr

cidr 保存一个 IP 网络地址声明. 其输入和输出遵循无类的互联网域路由 (Classless Internet Domain Routing)习惯. 声明一个无类(classless)的网络的格式是 x.x.x.x/y 这里 x.x.x.x 是 网络地址而 /y 是 网络掩码的二进制位数. 如果省略 /y, 那么掩码部分用旧的有类的网络分类假设进行计 算,但要求输入的数据已经包括了确定掩码的所需的所有8进制位.

Table 5-19是些例子:

Table 5-19. 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

5.8.3. inetcidr 对比

inetcidr 类型之间的基本区别是 inet 接受右边有非零位的网络掩码, 而 cidr 不接受.

技巧: 如果你不喜欢 inetcidr 值的输出 格式,请试一下 host() 和 text() 函数.

5.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 地址映射为硬件制造商的名字的工具.