PostgreSQL 提供用于存储 IPv4,IPv6 和 MAC 地址的数据类型, 在 Table 8-17 里显示。 用这些数据类型比用纯文本类型好,因为这些类型提供输入错误检查 和好些种特殊的操作和功能.
Table 8-17. 网络地址类型
名字 | 存储空间 | 描述 |
---|---|---|
cidr | 12 或 24 字节 | IPv4 或 IPv6 网络 |
inet | 12 或 24 字节 | IPv4 或 IPv6 网络和主机 |
macaddr | 6 字节 | MAC 地址 |
在对 inet 或者 cidr 数据类型进行排序的时候, IPv4 地址将总是排在 IPv6 地址前面,包括那些封装或者是映射在 IPv6 地址里 的 IPv4 地址,比如 ::10.2.3.4 或者 ::ffff::10.4.3.2。
inet 在一个数据域里保存一个主机 IPv4 或 IPv6 地址, 以及一个可选的它所处的等效的子网. 子网的等效是通过计算主机地址中有多少位表示网络地址的方法来 表示的 ("网络掩码"). 如果网络掩码是 32 并且地址是 IPv4 ,那么不表示任何子网,只是一台主机。 在 IPv6 里,地址长度是 128 位,因此 128 位将表明一个唯一的主机地址。 请注意如果你想只接受网络地址,你应该使用 cidr 类型而不是 inet.
该类型的输入格式是 地址/y 这里 地址 是 IPv4 或者 IPv6 主机,y 是网络掩码的位数. 如果 /y 部分未填, 则网络掩码对 IPv 而言是 32,对 IPv6 而言是 128, 表示只有一台主机。 显示时,如果 /y 部分是 /32,将不会显示出来.
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/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 或 cidr 值的输出 格式,请试一下 host ,text 和 abbrev 函数.
macaddr 类型存储 MAC 地址,也就是以太网卡硬件地址 (尽管 MAC 地址还用于其它用途).可以接受多种客户化的格式, 包括
'08002b:010203' |
'08002b-010203' |
'0800.2b01.0203' |
'08-00-2b-01-02-03' |
'08:00:2b:01:02:03' |
在 PostgreSQL 源代码发布的 contrib/mac 目录里有一些可以将 MAC 地址映射为硬件制造商的名字的工具.