↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 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 / 7.1
历史版本。 PostgreSQL 9.5 已结束支持。 2021-02-11. 请参阅 当前版本手册.

8.9. 网络地址类型 #

PostgreSQL 提供了用于存储 IPv4、IPv6 和 MAC 地址的数据类型,如表 8.21所示。使用这些数据类型来存储网络地址,比使用纯文本类型更好,因为它们提供了输入错误检查以及专门的操作符和函数(见第 9.12 节)。

表 8.21. 网络地址类型

名字存储尺寸描述
cidr7或19字节IPv4和IPv6网络
inet7或19字节IPv4和IPv6主机以及网络
macaddr6字节MAC地址

在对 inet 或 cidr 数据类型排序时,IPv4 地址总是排在 IPv6 地址之前,即使后者是封装或映射 IPv4 地址所得的 IPv6 地址,例如 ::10.2.3.4 或 ::ffff:10.4.3.2。

8.9.1. inet #

inet 在一个字段中保存 IPv4 或 IPv6 主机地址,以及可选的子网信息。子网由主机地址中包含的网络地址位数(即“网络掩码”)表示。如果网络掩码为 32 且地址是 IPv4,那么该值表示的不是子网,而只是单个主机。在 IPv6 中,地址长度为 128 位,因此 128 位表示一个唯一的主机地址。请注意,如果你只想接受网络地址,应使用 cidr 类型,而不是 inet。

该类型的输入格式为 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. inet 与 cidr #

inet 和 cidr 两种数据类型的本质区别在于:inet 接受网络掩码右侧仍含有非零位的值,而 cidr 不接受。

提示

如果你不喜欢 inet 或 cidr 值的输出格式,可以试试 host、text 和 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指定所示的第二种形式(带连字符)作为MAC地址的规范形式,并指定第一种形式(带冒号)作为位反转表示法,因此 08-00-2b-01-02-03 = 01:00:4D:08:04:0C。这种约定现在被广泛忽略,仅适用于过时的网络协议(如Token Ring)。PostgreSQL不提供位反转的功能,所有接受的格式都使用规范的LSB顺序。

剩下的五种输入格式不属于任何标准。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.