3.8. 网络地址数据类型 #
PostgreSQL 提供存储 IP 和 MAC 地址的数据类型。最好使用这些类型而不是普通文本类型,因为这些类型提供输入错误检查和若干专用的运算符与函数。
表 3.19. 网络地址数据类型
| 名字 | 存储尺寸 | 描述 | 范围 |
|---|---|---|---|
cidr | 12字节 | IP 网络 | 有效的 IPv4 网络 |
inet | 12字节 | IP 主机和网络 | 有效的 IPv4 主机或网络 |
macaddr | 6字节 | MAC地址 | 惯用格式 |
尚不支持 IPv6。
3.8.1. inet #
inet 类型在单个字段中保存一个
IP 主机地址以及可选的其所在子网的标识。子网标识由地址网络部分的位数(即“网络掩码”)表示。如果网络掩码是
32,则该值不表示子网而只表示单个主机。注意,如果你只想接受网络,应使用
cidr 类型而不是
inet。
此类型的输入格式是
x.x.x.x/y,其中
x.x.x.x 是一个
IP 地址,y 是网络掩码的位数。如果省略了
/y
部分,则网络掩码取
32,该值只表示单个主机。显示时,如果网络掩码为
32,则会省略
/y
部分。
3.8.2. cidr #
cidr 类型保存一个
IP 网络规范。输入和输出格式遵循无类别域间路由(Classless
Internet Domain
Routing)惯例。指定无类别网络的格式是
x.x.x.x/y,其中
x.x.x.x 是网络,y 是网络掩码的位数。如果省略
y,则按较老的有类别编号系统的假定来计算,但至少会大到包含输入中写出的所有八位组。
下面是一些示例:
表 3.20. cidr 类型输入示例
CIDR 输入 | CIDR 显示 | abbrev(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 |
3.8.3. inet vs cidr #
inet 和 cidr 两种数据类型的本质区别在于:inet 接受网络掩码右侧仍含有非零位的值,而
cidr 不接受。
提示
如果你不喜欢
inet 或
cidr 值的输出格式,可以试试
host()、text() 和
abbrev() 函数。
3.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' |
它们都表示同一个地址。数字
a 到
f 大小写均可接受。输出总是采用所示形式中的最后一种。
PostgreSQL 源码分发中的
contrib/mac 目录包含一些工具,可以用来把 MAC 地址映射为硬件制造商名称。